import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern; public class WebContent
{
/**
* 读取一个网页全部内容
*/
public String getOneHtml(final String htmlurl) throws IOException
{
URL url;
String temp;
final StringBuffer sb = new StringBuffer();
try
{
url = new URL(htmlurl);
final BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), "utf-8"));// 读取网页全部内容
while ((temp = in.readLine()) != null)
{
sb.append(temp);
}
in.close();
}
catch (final MalformedURLException me)
{
System.out.println("你输入的URL格式有问题!请仔细输入");
me.getMessage();
throw me;
}
catch (final IOException e)
{
e.printStackTrace();
throw e;
}
return sb.toString();
} /**
*
* @param s
* @return 获得网页标题
*/
public String getTitle(final String s)
{
String regex;
String title = "";
final List<String> list = new ArrayList<String>();
regex = "<title>.*?</title>";
final Pattern pa = Pattern.compile(regex, Pattern.CANON_EQ);
final Matcher ma = pa.matcher(s);
while (ma.find())
{
list.add(ma.group());
}
for (int i = 0; i < list.size(); i++)
{
title = title + list.get(i);
}
return outTag(title);
} /**
*
* @param s
* @return 获得链接
*/
public List<String> getLink(final String s)
{
String regex;
final List<String> list = new ArrayList<String>();
regex = "<a[^>]*href=(\"([^\"]*)\"|\'([^\']*)\'|([^\\s>]*))[^>]*>(.*?)</a>";
final Pattern pa = Pattern.compile(regex, Pattern.DOTALL);
final Matcher ma = pa.matcher(s);
while (ma.find())
{
list.add(ma.group());
}
return list;
} /**
*
* @param s
* @return 获得脚本代码
*/
public List<String> getScript(final String s)
{
String regex;
final List<String> list = new ArrayList<String>();
regex = "<script.*?</script>";
final Pattern pa = Pattern.compile(regex, Pattern.DOTALL);
final Matcher ma = pa.matcher(s);
while (ma.find())
{
list.add(ma.group());
}
return list;
} /**
*
* @param s
* @return 获得CSS
*/
public List<String> getCSS(final String s)
{
String regex;
final List<String> list = new ArrayList<String>();
regex = "<style.*?</style>";
final Pattern pa = Pattern.compile(regex, Pattern.DOTALL);
final Matcher ma = pa.matcher(s);
while (ma.find())
{
list.add(ma.group());
}
return list;
} /**
*
* @param s
* @return 去掉标记
*/
public String outTag(final String s)
{
return s.replaceAll("<.*?>", "");
} /**
*
* @param s
* @return 获取雅虎知识堂文章标题及内容
*/
public HashMap<String, String> getFromYahoo(final String s)
{
final HashMap<String, String> hm = new HashMap<String, String>();
final StringBuffer sb = new StringBuffer();
String html = "";
System.out.println("\n------------------开始读取网页(" + s + ")--------------------");
try
{
html = getOneHtml(s);
}
catch (final Exception e)
{
e.getMessage();
}
// System.out.println(html);
System.out.println("------------------读取网页(" + s + ")结束--------------------\n");
System.out.println("------------------分析(" + s + ")结果如下--------------------\n");
String title = outTag(getTitle(html));
title = title.replaceAll("_雅虎知识堂", "");
// Pattern pa=Pattern.compile("<div
// class=\"original\">(.*?)((\r\n)*)(.*?)((\r\n)*)(.*?)</div>",Pattern.DOTALL);
final Pattern pa = Pattern.compile("<div class=\"original\">(.*?)</p></div>", Pattern.DOTALL);
final Matcher ma = pa.matcher(html);
while (ma.find())
{
sb.append(ma.group());
}
String temp = sb.toString();
temp = temp.replaceAll("(<br>)+?", "\n");// 转化换行
temp = temp.replaceAll("<p><em>.*?</em></p>", "");// 去图片注释
hm.put("title", title);
hm.put("original", outTag(temp));
return hm; } /**
*
* @param args
* 测试一组网页,针对雅虎知识堂
*/
public static void main(final String args[])
{
String url = "";
final List<String> list = new ArrayList<String>();
System.out.print("输入URL,一行一个,输入结束后输入 go 程序开始运行: \n");
/*
* http://ks.cn.yahoo.com/question/1307121201133.html
* http://ks.cn.yahoo.com/question/1307121101907.html
* http://ks.cn.yahoo.com/question/1307121101907_2.html
* http://ks.cn.yahoo.com/question/1307121101907_3.html
* http://ks.cn.yahoo.com/question/1307121101907_4.html
* http://ks.cn.yahoo.com/question/1307121101907_5.html
* http://ks.cn.yahoo.com/question/1307121101907_6.html
* http://ks.cn.yahoo.com/question/1307121101907_7.html
* http://ks.cn.yahoo.com/question/1307121101907_8.html
*/
final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try
{
while (!(url = br.readLine()).equals("go"))
{
list.add(url);
}
}
catch (final Exception e)
{
e.getMessage();
}
final WebContent wc = new WebContent();
HashMap<String, String> hm = new HashMap<String, String>();
for (int i = 0; i < list.size(); i++)
{
hm = wc.getFromYahoo(list.get(i));
System.out.println("标题: " + hm.get("title"));
System.out.println("内容: \n" + hm.get("original"));
}
/*
* String htmlurl[] = {
* "http://ks.cn.yahoo.com/question/1307121201133.html",
* "http://ks.cn.yahoo.com/question/1307121101907.html",
* "http://ks.cn.yahoo.com/question/1307121101907_2.html",
* "http://ks.cn.yahoo.com/question/1307121101907_3.html",
* "http://ks.cn.yahoo.com/question/1307121101907_4.html",
* "http://ks.cn.yahoo.com/question/1307121101907_5.html",
* "http://ks.cn.yahoo.com/question/1307121101907_6.html",
* "http://ks.cn.yahoo.com/question/1307121101907_7.html",
* "http://ks.cn.yahoo.com/question/1307121101907_8.html" }; WebContent
* wc = new WebContent(); HashMap<String, String> hm = new HashMap<String,
* String>(); for (int i = 0; i < htmlurl.length; i++) { hm =
* wc.getFromYahoo(htmlurl[i]); System.out.println("标题: " +
* hm.get("title")); System.out.println("内容: \n" + hm.get("original")); }
*/
/*
* String html=""; String link=""; String sscript=""; String content="";
* System.out.println(htmlurl+" 开始读取网页内容:");
* html=wc.getOneHtml(htmlurl); System.out.println(htmlurl+"
* 读取完毕开始分析……"); html=html.replaceAll("(<script.*?)((\r\n)*)(.*?)((\r\n)*)(.*?)(</script>)","
* ");//去除脚本 html=html.replaceAll("(<style.*?)((\r\n)*)(.*?)((\r\n)*)(.*?)(</style>)","
* ");//去掉CSS html=html.replaceAll("<title>.*?</title>"," ");//除去页面标题
* html=html.replaceAll("<a[^>]*href=(\"([^\"]*)\"|\'([^\']*)\'|([^\\s>]*))[^>]*>(.*?)</a>","
* ");//去掉链接 html=html.replaceAll("(\\s){2,}?"," ");//除去多余空格
* html=wc.outTag(html);//多余标记 System.out.println(html);
*/ /*
* String s[]=html.split(" +"); for(int i=0;i<s.length;i++){
* content=(content.length()>s[i].length())?content:s[i]; }
* System.out.println(content);
*/ // System.out.println(htmlurl+"网页内容结束");
/*
* System.out.println(htmlurl+"网页脚本开始:"); List
* script=wc.getScript(html); for(int i=0;i<script.size();i++){
* System.out.println(script.get(i)); }
* System.out.println(htmlurl+"网页脚本结束:");
*
* System.out.println(htmlurl+"CSS开始:"); List css=wc.getCSS(html);
* for(int i=0;i<css.size();i++){ System.out.println(css.get(i)); }
* System.out.println(htmlurl+"CSS结束:");
*
* System.out.println(htmlurl+"全部链接内容开始:"); List list=wc.getLink(html);
* for(int i=0;i<list.size();i++){ link=list.get(i).toString(); }
* System.out.println(htmlurl+"全部链接内容结束:");
*
* System.out.println("内容"); System.out.println(wc.outTag(html));
*/
}
}

  

java 网页页面抓取标题和正文的更多相关文章

  1. java网页数据抓取实例

    在很多行业中,要对行业数据进行分类汇总,及时分析行业数据,对于公司未来的发展,有很好的参照和横向对比.所以,在实际工作,我们可能要遇到数据采集这个概念,数据采集的最终目的就是要获得数据,提取有用的数据 ...

  2. Java HTML页面抓取实例

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...

  3. 新浪新闻页面抓取(JAVA-Jsoup)

    1.使用gradle建立工程: 工程格式如下: include ':spider-demo' rootProject.name = 'my-spider-demo' settings def void ...

  4. 爬虫---selenium动态网页数据抓取

    动态网页数据抓取 什么是AJAX: AJAX(Asynchronouse JavaScript And XML)异步JavaScript和XML.过在后台与服务器进行少量数据交换,Ajax 可以使网页 ...

  5. Java---网络蜘蛛-网页邮箱抓取器~源码

    刚刚学完Socket,迫不及待的做了这个网页邮箱抓取~~~ 现在有越来越多的人热衷于做网络爬虫(网络蜘蛛),也有越来越多的地方需要网络爬虫,比如搜索引擎.资讯采集.舆情监测等等,诸如此类.网络爬虫涉及 ...

  6. 网页信息抓取进阶 支持Js生成数据 Jsoup的不足之处

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/23866427 今天又遇到一个网页数据抓取的任务,给大家分享下. 说道网页信息抓取 ...

  7. Android登录client,验证码的获取,网页数据抓取与解析,HttpWatch基本使用

    大家好,我是M1ko.在互联网时代的今天,假设一个App不接入互联网.那么这个App一定不会有长时间的生命周期,因此Android网络编程是每个Android开发人员必备的技能.博主是在校大学生,自学 ...

  8. 网页信息抓取 Jsoup的不足之处 httpunit

    今天又遇到一个网页数据抓取的任务,给大家分享下. 说道网页信息抓取,相信Jsoup基本是首选的工具,完全的类JQuery操作,让人感觉很舒服.但是,今天我们就要说一说Jsoup的不足. 1.首先我们新 ...

  9. C# 页面抓取获取快递信息

    通过页面抓取信息可以获得很多我们想要的信息,比如现在常会用到的快递查询,主要抓取的网站为http://www.kuaidi100.com/ 通过IE的网络分析我们可以得到下面信息 通过对这个网站的分析 ...

随机推荐

  1. 利用sql批量删除表,存储过程

    利用sql批量删除表,存储过程. 最近用godaddy的空间,由于系统里面的表多,一个个的删除很麻烦,就网上搜集了一下解决方法. 给大家分享一下: 1.批量删除存储过程 declare @procNa ...

  2. A+B问题通解_Pascal_C++_Java

    世界不断发展,各种电子设备不断变得更加迷你,代码却越写越长…… A+B Problem Input:Two integer A,B Output:The ans of A+B 1971年,Niklau ...

  3. Java Web架构知识整理——记一次阿里面试经历

    惭愧,从一次电面说起.我个人在某国企做一名软件设计师,国企大家都懂的,待遇一般而且没啥意思,做的方向基本都是操作系统.驱动和工具软件的开发,语言基本都是C/C++.最近也想跳槽,刚好有幸得到了一次阿里 ...

  4. Cesium简介

    一.Cesium介绍 Cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎.Cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区域,并提供良好的触摸支持 ...

  5. c# 生成json数据包

    json数据类型,归根到底就是一个字符串,管他里面什么格式,它就是一个字符串来的! 看一个json数据包: { "touser":"OPENID", " ...

  6. 8051学习笔记——IIC与EEPROM实验

    main.c #include <reg51.h> #include "iic.h" #define AT24C02 0xa0 //AT24C02 地址 sbit LS ...

  7. Spring 3.0以后版本的定时任务

    自主开发的定时任务工具,spring task,可以将它比作一个轻量级的Quartz,而且使用起来很简单,除spring相关的包外不需要额外的包,而且支持注解和配置文件两种 <beans xml ...

  8. Android常见包

    Android.jar常见包 android.app-----------提供高层的程序模型.提供基本的运行环境android.content-------包含各种的对设备上的数据进行访问和发布的类a ...

  9. noip2010提高组题解

    NOIP2010提高组题解 T1:机器翻译 题目大意:顺序输入n个数,有一个队列容量为m,遇到未出现元素入队,求入队次数. AC做法:直接开1000的队列模拟过程. T2:乌龟棋 题目大意:有长度为n ...

  10. SVN与TortoiseSVN实战:属性的奇技淫巧(二)

    硬广:<SVN与TortoiseSVN实战>系列已经写了七篇,本系列结合TortoiseSVN对SVN中容易被忽视的部分进行了详解. 关于属性的奇技淫巧较多,分为两篇来写,第一篇详见< ...