Java爬虫,简易入门,秒杀htmlparser

来源:互联网 发布:黑科技软件论坛 编辑:程序博客网 时间:2024/04/30 13:42

关于爬虫,之前一直用做第一个站的时候,记得那时候写的 爬虫  是爬sina 的数据,用的就是 htmlparser  可能是由于好奇和满足我当时的需求,那开始就各种写啊,一个页面,把需要的内容处理下来,复杂的写完后不写注释自己都看不懂,一直我也知道 JSOUP  好,也感觉没空学习新的 爬虫  (完全是借口啊)。最近我试了一下用 JSOUP  ,尼玛,完全爱上了,完全秒杀 htmlparser  

PS:用过都知道JSOUP 是支持css select (CSS选择器),对于我这样的 jQuery  用的非常6666的人来说,哪就是一个字,爽死了。

Maven  依赖包:

  1. <dependency>
  2. <groupId>org.jsoup</groupId>
  3. <artifactId>jsoup</artifactId>
  4. <version>1.9.2</version>
  5. </dependency>

下面展示的代码是,实现了相同的一个业务,爬取了百度的一些内容。但是你可以看到,Htmlparser繁琐,JSOUP轻量级。不多说下面看代码。

Htmlparser Java代码:

  1. String url = "http://www.baidu.com/s?wd=site:(www.zybang.com)&rn=50";
  2. /**开始爬取*/
  3. Parser parser = new Parser(url);
  4. //设置字符集
  5. parser.setEncoding("utf-8");
  6. //创建一个filter
  7. NodeFilter contentFilter = new AndFilter(new TagNameFilter("div"), new HasAttributeFilter("id","content_left"));
  8. //通过Filter过滤
  9. NodeList contents = parser.parse(contentFilter);
  10. //再创建Filter,用途通过父类去过滤子类
  11. NodeFilter divsFilter = new AndFilter(new TagNameFilter("div"), new HasAttributeFilter("data-tools"));
  12. NodeList divs = contents.extractAllNodesThatMatch(divsFilter,true);
  13. //取值
  14. for (int i = 0; i < divs.size(); i++) {
  15. Div div = (Div) divs.elementAt(i);
  16. String json = div.getAttribute("data-tools");
  17. if(StringUtils.isNotBlank(json) && json.trim().startsWith("{")){
  18. //获取到json
  19. JSONObject jsonObj = JSONObject.fromObject(json.trim());
  20. //获取url
  21. String durl = jsonObj.getString("url");//内容url
  22. //do something
  23. }
  24. }

相同业务之后改成 JSOUP Java代码:

  1. String url = "http://www.baidu.com/s?wd=site:(www.zybang.com)&rn=50";
  2. Document doc = Jsoup.connect(url).get();
  3. Elements divs = doc.select("div#content_left div[data-tools]");
  4. for (Element element : divs) {
  5. String json = element.attr("data-tools");
  6. if(StringUtils.isNotBlank(json) && json.trim().startsWith("{")){
  7. //获取到json
  8. JSONObject jsonObj = JSONObject.fromObject(json.trim());
  9. //获取url
  10. String durl = jsonObj.getString("url");//内容url
  11. //do something
  12. }
  13. }

瞬间你看看,逻辑思维都符合现在流行的链式编程。

JSOUP  创建一个模拟浏览器行为的请求头:

  1. Document doc = Jsoup.connect(url)
  2. .header("Accept", "*/*")
  3. .header("Accept-Encoding", "gzip, deflate")
  4. .header("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3")
  5. .header("Referer", "https://www.baidu.com/")
  6. .header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0")
  7. .timeout(5000)
  8. .get();

然后就开启jQuery模式了。

  1. //获取id = 1 的元素的文本值。
  2. doc.select("#1").text();
  3. //获取id = 1 的元素的HTML值。
  4. doc.select("#1").html();
  5. //获取id =1 直接子类class='css1' , 然后所有子类的含有class = css2 的集合
  6. doc.select("#id > .css1 .css2");

  1. .....
  2. 版权所属:SO JSON 在线工具

    原文地址:http://www.sojson.com/blog/171.html

0 0
原创粉丝点击