日期:2014-05-16  浏览次数:20314 次

Jsoup网页内容抓取分析(1)

? ? ?在Java 程序在解析HTML 文档时,大家应该晓得htmlparser 这个开源项目,我也是使用过,不过这个程序到了2006年就没有更新了。由于我的基础较差,对于扩展自定义的标签还是不太懂,还是有超时问题困扰,偶然的机会中发现有jsoup,而且更新到了1.72版,使用起来还是很容易上手的。下面写些使用心得:

? ? ? ??jsoup?is a Java library for working with real-world HTML. It provides a very convenient API for extracting and manipulating data, using the best of DOM, CSS, and jquery-like methods.

? ? ? ?jsuop是一款java的html解析器,提供一套非常省力的API,通过dom模型css和类似于jquery的方式来获取和操作数据。

? ? ? 功能:1.解析一个Html文档,2.解析一个body片段

? ? ? ?

String html = "<html><head><title>First parse</title></head>"
  + "<body><p>Parsed HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);//分析文档,使用doc.toString()可以转为文本
Element body=doc.body();//获取body片段,使用body.toString()可以转为文本

? ? ?

? ? ? 获取方式:1.从本地文件加载 ? 2.根据url地址获取

?

? ? ?

/**使用静态 Jsoup.parse(File in, String charsetName, String baseUri) 方法
 *其中baseUri参数用于解决文件中URLs是相对路径的问题。
 *如果不需要可以传入一个空的字符串。
 */
File input = new File("/tmp/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");

??

/**
 *根据url直接获取内容,可以加入超时,get方法不行,就用post方法
 *我在实际应用中,出现404,405,504等错误信息
 *将get改为post就可以,或者反过来改
 *如果等以后弄明白了,再来解释清楚
 */
Document doc1 = Jsoup.connect("http://www.hao123.com/").get();
String title = doc1.title(); //获取网页的标题
String content=doc1.toString();//将网页转为文本

Document doc2 = Jsoup.connect("http://www.hao123.com")
  .data("query", "Java")//请求参数
  .userAgent("Mozilla")//设置urer-agent
  .cookie("auth", "token")//设置cookie
  .timeout(50000)//设置连接超时
  .post();//或者改为get

?

?

?

?

1 楼 mz0827 前天  
我觉得jsoup还是只用来解析html比较好。获取html可以使用Apache的HttpClient,3或者4都可以
2 楼 asialee 前天  
jsoup的api定义的非常好
3 楼 cjp1989 前天  
mz0827 写道
我觉得jsoup还是只用来解析html比较好。获取html可以使用Apache的HttpClient,3或者4都可以

谢谢,我一定试下。
我用java自带的httpURLConnection获取链接,发现耗时比较大,而且还有的无法加载出来,自己写了个demo比较耗时,发现jsoup综合还是快于HttpURLConnection。
4 楼 cjp1989 前天  
asialee 写道
jsoup的api定义的非常好

完全赞同,我也是觉得这个好用!
5 楼 sanshizi 昨天  
这个库不错
6 楼 cjp1989 昨天  
sanshizi 写道
这个库不错

确实是很好的!
7 楼 linweibin 昨天  
mz0827 写道
我觉得jsoup还是只用来解析html比较好。获取html可以使用Apache的HttpClient,3或者4都可以

这两个一般都是结合使用的
8 楼 cjp1989 昨天  
linweibin 写道
mz0827 写道
我觉得jsoup还是只用来解析html比较好。获取html可以使用Apache的HttpClient,3或者4都可以

这两个一般都是结合使用的

赞同,谢谢指教,现在在做通用配置,还有好多要解决的问题!