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

JSON 2017-05-13 21:28:22 47707

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

后面我会采用视频讲解的方式,结合实战去讲解。等着吧,我现在在整理 FreeMarker  的视频!

版权所属:SO JSON在线解析

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

转载时必须以链接形式注明原始出处及本声明。

本文主题:

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

关于作者
一个低调而闷骚的男人。
相关文章
JSOUP 教程JSOUP爬虫教程JSOUP超时分析与处理
Java爬虫Jsoup 取大众点评、美团商家信息电话号码解决方案
Java 文字转图片输出,Java 输出透明背景图片,Java文字转图片防爬虫
robots协议解读和作用(学习爬虫必看)
百度收录教程,怎么做到百度收入你的页面,SEO 教程
JSOUP 教程JSOUP请求JSON ,JSOUP返回JSON 数据
JSOUP教程JSOUP 乱码处理,JSOUP生僻字乱码解决方案
JSOUP教程JSOUP的正确打开姿势。
Java Cookie 操作工具类
Shiro教程(四)Shiro + Redis配置
最新文章
Java获取浏览器请求头(User-Agent),分析浏览器信息,系统信息的几种办法。 138208
最热文章
Java获取浏览器请求头(User-Agent),分析浏览器信息,系统信息的几种办法。 138208
支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

查看我的收藏

正在加载... ...