Java爬虫,简易入门,秒杀htmlparser
关于爬虫,之前一直用做第一个站的时候,记得那时候写的 爬虫 是爬sina
的数据,用的就是 htmlparser 可能是由于好奇和满足我当时的需求,那开始就各种写啊,一个页面,把需要的内容处理下来,复杂的写完后不写注释自己都看不懂,一直我也知道 JSOUP 好,也感觉没空学习新的 爬虫 (完全是借口啊)。最近我试了一下用 JSOUP ,尼玛,完全爱上了,完全秒杀 htmlparser 。
PS:用过都知道
JSOUP
是支持css select
(CSS选择器),对于我这样的 jQuery 用的非常6666的人来说,哪就是一个字,爽死了。
Maven 依赖包:
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.9.2</version>
</dependency>
下面展示的代码是,实现了相同的一个业务,爬取了百度的一些内容。但是你可以看到,Htmlparser繁琐,JSOUP轻量级。不多说下面看代码。
Htmlparser Java代码:
String url = "http://www.baidu.com/s?wd=site:(www.zybang.com)&rn=50";
/**开始爬取*/
Parser parser = new Parser(url);
//设置字符集
parser.setEncoding("utf-8");
//创建一个filter
NodeFilter contentFilter = new AndFilter(new TagNameFilter("div"), new HasAttributeFilter("id","content_left"));
//通过Filter过滤
NodeList contents = parser.parse(contentFilter);
//再创建Filter,用途通过父类去过滤子类
NodeFilter divsFilter = new AndFilter(new TagNameFilter("div"), new HasAttributeFilter("data-tools"));
NodeList divs = contents.extractAllNodesThatMatch(divsFilter,true);
//取值
for (int i = 0; i < divs.size(); i++) {
Div div = (Div) divs.elementAt(i);
String json = div.getAttribute("data-tools");
if(StringUtils.isNotBlank(json) && json.trim().startsWith("{")){
//获取到json
JSONObject jsonObj = JSONObject.fromObject(json.trim());
//获取url
String durl = jsonObj.getString("url");//内容url
//do something
}
}
相同业务之后改成 JSOUP Java代码:
String url = "http://www.baidu.com/s?wd=site:(www.zybang.com)&rn=50";
Document doc = Jsoup.connect(url).get();
Elements divs = doc.select("div#content_left div[data-tools]");
for (Element element : divs) {
String json = element.attr("data-tools");
if(StringUtils.isNotBlank(json) && json.trim().startsWith("{")){
//获取到json
JSONObject jsonObj = JSONObject.fromObject(json.trim());
//获取url
String durl = jsonObj.getString("url");//内容url
//do something
}
}
瞬间你看看,逻辑思维都符合现在流行的链式编程。
JSOUP 创建一个模拟浏览器行为的请求头:
Document doc = Jsoup.connect(url)
.header("Accept", "*/*")
.header("Accept-Encoding", "gzip, deflate")
.header("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3")
.header("Referer", "https://www.baidu.com/")
.header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0")
.timeout(5000)
.get();
然后就开启jQuery模式了。
//获取id = 1 的元素的文本值。
doc.select("#1").text();
//获取id = 1 的元素的HTML值。
doc.select("#1").html();
//获取id =1 直接子类class='css1' , 然后所有子类的含有class = css2 的集合
doc.select("#id > .css1 .css2");
.....
版权所属:SO JSON 在线工具
原文地址:http://www.sojson.com/blog/171.html
Java爬虫,简易入门,秒杀htmlparser相关推荐
- Java命令简易入门-3:javac与java命令之(java与jar)
Java命令简易入门-3:javac与java命令之二(java与jar) 文章目录 Java命令简易入门-3:javac与java命令之二(java与jar) 1. 实验环境与实验文件 2. Jav ...
- Java命令简易入门-2:javac与java命令之一(javac)
Java命令简易入门2-Javac与Java命令之一 文章目录 Java命令简易入门2-Javac与Java命令之一 基本概念 实验环境与实验文件 1.javac与java基本用法 2. javac的 ...
- Java爬虫技术—入门秘籍之HTTP协议和robtos协议(一)
文章目录: 入门秘籍-Http协议与robots协议 内功修炼-深入理解网络爬虫概念,作用,原理和爬取方式及流程 山中奇遇-得授页面解析技术之Xpath 入驻兵器阁-获取爬虫神器之Jsoup 入驻兵器 ...
- python3爬虫简易入门图片_Python3爬虫图片抓取
在上一章中,我们已经学会了如何使用Python3爬虫抓取文字,那么在本章教程中,将通过实例来教大家如何使用Python3爬虫批量抓取图片. (1)实战背景 上图的网站的名字叫做Unsplash,免费高 ...
- Java爬虫 获取中国天气网7日天气预报
Java爬虫 获取中国天气网7日天气预报 前言 工具准备 爬取数据 获取日期和星期 获取天气描述 获取温度范围 获取风向及风力 完整代码 引用 前言 项目需要获取7日天气预报,免费好用的接口寻觅不到, ...
- JSOUP 教程—— Java爬虫,简易入门,秒杀htmlparser
转载自 JSOUP 教程-- Java爬虫,简易入门,秒杀htmlparser 关于爬虫,之前一直用做第一个站的时候,记得那时候写的 爬虫 是爬sina 的数据,用的就是 htmlparser 可 ...
- java爬虫之Jsoup入门
网络爬虫 网络爬虫概念 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁. ...
- java爬虫下载图片到磁盘_java入门爬虫(爬取网页的图片下载到本地磁盘)
java爬虫入门技术 我们需要用到http协议 从而建立java程序和网页的连接 URL url = new URL("https://www.ivsky.com/tupian/ziranf ...
- Java爬虫入门篇---Jsoup工具
Java爬虫入门篇---Jsoup工具 前言 准备工作 获取文本数据 获取页面中所有的图片 前言 pythoy的scrapy框架是大名鼎鼎,Jsoup则为Java框架的爬虫 准备工作 1.下载jsou ...
最新文章
- python访问数据库如何解决高并发_怎样解决数据库高并发的问题
- hubbledotnet 远程连接提示:无法从传输连接中读取数据:远程主机强迫关闭一个现有的连接...
- 单片机蓝牙烧录_蓝牙模块与单片机如何连接?
- Java Springboot+VUE前后端分离网上手机商城平台系统设计和实现以及论文报告
- MFC之处理消息映射的步骤...
- java 对象 转换 工具类_Java中excel与对象的互相转换的通用工具类编写与使用(基于apache-poi-ooxml)...
- tps是什么意思_系统了解精益生产系统TPS精益思想丛书介绍
- 关于hibernate的一些小记
- Java基础通信_Java网络通信基础编程(必看篇)
- [转载] python中set函数是什么数据类型_Python基本数据类型-list-tuple-dict-set详解
- 图书管理系统(借还图书)--Java实现(附源码)
- 系统防御工程v0.2
- Jenkins自动化构建Gitee项目
- 桌面图标有蓝底怎么办?
- 教你如何写初/高级技术岗位简历
- matlab 怎么求直线斜率,matlab中如何求近似(不平滑)直线的斜率
- AESECB加密算法 C 语言代码实现
- 整理并记录几种运算放大器
- 【Web Development - AnnihilateSword】02 - Introduction to HTML
- 2023年美国大学生数学建模竞赛(美赛)ABCDEF题思路资料汇总贴