关于爬虫,之前一直用做第一个站的时候,记得那时候写的 爬虫  是爬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

Java爬虫,简易入门,秒杀htmlparser相关推荐

  1. Java命令简易入门-3:javac与java命令之(java与jar)

    Java命令简易入门-3:javac与java命令之二(java与jar) 文章目录 Java命令简易入门-3:javac与java命令之二(java与jar) 1. 实验环境与实验文件 2. Jav ...

  2. Java命令简易入门-2:javac与java命令之一(javac)

    Java命令简易入门2-Javac与Java命令之一 文章目录 Java命令简易入门2-Javac与Java命令之一 基本概念 实验环境与实验文件 1.javac与java基本用法 2. javac的 ...

  3. Java爬虫技术—入门秘籍之HTTP协议和robtos协议(一)

    文章目录: 入门秘籍-Http协议与robots协议 内功修炼-深入理解网络爬虫概念,作用,原理和爬取方式及流程 山中奇遇-得授页面解析技术之Xpath 入驻兵器阁-获取爬虫神器之Jsoup 入驻兵器 ...

  4. python3爬虫简易入门图片_Python3爬虫图片抓取

    在上一章中,我们已经学会了如何使用Python3爬虫抓取文字,那么在本章教程中,将通过实例来教大家如何使用Python3爬虫批量抓取图片. (1)实战背景 上图的网站的名字叫做Unsplash,免费高 ...

  5. Java爬虫 获取中国天气网7日天气预报

    Java爬虫 获取中国天气网7日天气预报 前言 工具准备 爬取数据 获取日期和星期 获取天气描述 获取温度范围 获取风向及风力 完整代码 引用 前言 项目需要获取7日天气预报,免费好用的接口寻觅不到, ...

  6. JSOUP 教程—— Java爬虫,简易入门,秒杀htmlparser

    转载自 JSOUP 教程-- Java爬虫,简易入门,秒杀htmlparser 关于爬虫,之前一直用做第一个站的时候,记得那时候写的 爬虫  是爬sina 的数据,用的就是 htmlparser  可 ...

  7. java爬虫之Jsoup入门

    网络爬虫 网络爬虫概念 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁. ...

  8. java爬虫下载图片到磁盘_java入门爬虫(爬取网页的图片下载到本地磁盘)

    java爬虫入门技术 我们需要用到http协议 从而建立java程序和网页的连接 URL url = new URL("https://www.ivsky.com/tupian/ziranf ...

  9. Java爬虫入门篇---Jsoup工具

    Java爬虫入门篇---Jsoup工具 前言 准备工作 获取文本数据 获取页面中所有的图片 前言 pythoy的scrapy框架是大名鼎鼎,Jsoup则为Java框架的爬虫 准备工作 1.下载jsou ...

最新文章

  1. python访问数据库如何解决高并发_怎样解决数据库高并发的问题
  2. hubbledotnet 远程连接提示:无法从传输连接中读取数据:远程主机强迫关闭一个现有的连接...
  3. 单片机蓝牙烧录_蓝牙模块与单片机如何连接?
  4. Java Springboot+VUE前后端分离网上手机商城平台系统设计和实现以及论文报告
  5. MFC之处理消息映射的步骤...
  6. java 对象 转换 工具类_Java中excel与对象的互相转换的通用工具类编写与使用(基于apache-poi-ooxml)...
  7. tps是什么意思_系统了解精益生产系统TPS精益思想丛书介绍
  8. 关于hibernate的一些小记
  9. Java基础通信_Java网络通信基础编程(必看篇)
  10. [转载] python中set函数是什么数据类型_Python基本数据类型-list-tuple-dict-set详解
  11. 图书管理系统(借还图书)--Java实现(附源码)
  12. 系统防御工程v0.2
  13. Jenkins自动化构建Gitee项目
  14. 桌面图标有蓝底怎么办?
  15. 教你如何写初/高级技术岗位简历
  16. matlab 怎么求直线斜率,matlab中如何求近似(不平滑)直线的斜率
  17. AESECB加密算法 C 语言代码实现
  18. 整理并记录几种运算放大器
  19. 【Web Development - AnnihilateSword】02 - Introduction to HTML
  20. 2023年美国大学生数学建模竞赛(美赛)ABCDEF题思路资料汇总贴

热门文章

  1. 本人编写的《新编J2ME就业培训教程》即将出版!
  2. CCIE-IPV6 NAPT
  3. mysql发生系统错误 1067 查看服务日志Aborting
  4. 奥斯卡·王尔德十大经典语录
  5. 基于python的pygame实现造梦西游天宫道的笔记(联机功能篇,完结)
  6. MBSE与MBD的融合
  7. php ywsbxny cn,jquery幻灯片插件bxslider样式改进实例_jquery
  8. 危机公关的整个流程是怎样的?
  9. 解决GitHub下载速度慢的问题(已解决)
  10. b550和x570有什么区别 哪个好