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. HttpWebRequest访问时,错误:(401)未经授权。

    HttpWebRequest访问时,错误:(401)未经授权. 某网页,我不想做登录界面,直接使用域的帐号密码来访问.如果网站设置成Window身份验证,单独的页面都没问题,而是通过使用HttpWeb ...

  2. ELK部署

    一.logstash 版本:2.4.0 要求:Java 7 + 下载:https://download.elastic.co/logstash/logstash/logstash-2.4.0.tar. ...

  3. C程序之修改Windows的控制台颜色(转载)

    Windows的CMD可以和Linux下的终端一样可以有五颜六色,目前我在网上找到2种方法可以修改Windows的CMD,当然都是在代码中修改的.在“CMD”->“属性”->“颜色”,这种 ...

  4. 多线程查询FTP Server上的文件

    情形是这样的,最近做一个自动化的项目,当batch跑成功了,FTP Server上会有特定的生成文件.但是不确定是什么时候会有,大概是batch跑完了5分钟之内吧,所以在脚本里设置检查点的时候,需要每 ...

  5. IOS thread1:exc_bad)access(code=exc_1386_gpflt)错误

    这种错误通常是内存管理的问题,一般是访问了已经释放的对象导致的,可以开启僵尸对象(Zombie Objects)来定位问题: 在Xcode的菜单: Product->Scheme->Edi ...

  6. [SSH 2] 以网站主页面浅谈Struts2配置

    导读:前面总体的介绍了一下SSH框架,那么作为Struts这一支,具体是怎么配置的呢?本篇博客则主要是以自己做过的实例中的登录一条线,简单介绍一下struts2的配置,如有不妥之处,还请大家多提点提点 ...

  7. WF4.0 Activities<第一篇>

    一.基元工具 1.Delay Delay用于延迟一段时间执行下面的流程.在WF中实例是单线程运行的,Delay并不是Thread.Sleep方法实现的. Delay有一个Duration属性,用于设置 ...

  8. sql server命名规范

    命名规范 表 表名如Order/UserAccout 符合以下规范: 1.     统一采用单数形式,反对Orders 2.     首字母大写,多个单词的话,单词首字母大写,反对order/User ...

  9. Datatable导出Excel

    ; IRow headerRow = sheet.CreateRow(); ; ; ; iRowIndex++; } ; i < icolIndex; i++) { sheet.AutoSize ...

  10. JS常用的设计模式(11)—— 中介者模式

    中介者对象可以让各个对象之间不需要显示的相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互. 打个比方,军火买卖双方为了安全起见,找了一个信任的中介来进行交易.买家A把钱交给中介B,然后从中 ...