文档章节

java爬虫gecco支持htmlunit

xtuhcy
 xtuhcy
发布于 2016/03/07 10:30
字数 760
阅读 2413
收藏 2

#java爬虫gecco支持htmlunit java爬虫gecco发布了1.0.5版本,增加了对htmlunit的支持。htmlunit是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容。项目可以模拟浏览器运行,被誉为java浏览器的开源实现。这个没有界面的浏览器,运行速度也是非常迅速的。htmlunit采用的是rhino作为javascript的解析引擎。 ##使用方法

  • 下载

      <dependency>
          <groupId>com.geccocrawler</groupId>
          <artifactId>gecco-htmlunit</artifactId>
          <version>x.x.x</version>
      </dependency>
    

##Demo JD的商品详情信息里的价格的信息是通过ajax异步请求而来的,之前是利用@Ajax注解的方式实现的。这里用htmlunit来自动完成ajax请求。

@Gecco(matchUrl="http://item.jd.com/{code}.html", pipelines="consolePipeline", downloader="htmlUnitDownloder")
public class JDDetail implements HtmlBean {

	private static final long serialVersionUID = -377053120283382723L;

	@RequestParameter
	private String code;
	
	@Text
	@HtmlField(cssPath=".p-price")
	private String price;
	
	@Text
	@HtmlField(cssPath="#name > h1")
	private String title;
	
	@Text
	@HtmlField(cssPath="#p-ad")
	private String jdAd;
	
	@HtmlField(cssPath="#product-detail-2")
	private String detail;

	public String getPrice() {
		return price;
	}

	public void setPrice(String price) {
		this.price = price;
	}

	public String getJdAd() {
		return jdAd;
	}

	public void setJdAd(String jdAd) {
		this.jdAd = jdAd;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getDetail() {
		return detail;
	}

	public void setDetail(String detail) {
		this.detail = detail;
	}

	public String getCode() {
		return code;
	}

	public void setCode(String code) {
		this.code = code;
	}

	public static void main(String[] args) throws Exception {
		HttpRequest request = new HttpGetRequest("http://item.jd.com/1455427.html");
		request.setCharset("GBK");
		GeccoEngine.create()
		.classpath("com.geccocrawler.gecco.htmlunit")
		//开始抓取的页面地址
		.start(request)
		//开启几个爬虫线程
		.thread(1)
		.timeout(1000)
		.run();
	}
}

##优缺点 使用htmlunit确实能省去很多工作,但是htmlunit也存在很多弊端:

1、效率低下,使用htmlunit后,下载器要将所有js一并下载下来,同时要执行所有js代码,下载一个页面有时需要5~10秒。

2、rhino引擎对js的兼容问题,rhino的兼容性还是存在不少问题的,上述demo就有很多js执行错误。如果大家在抓取时不想看到这些error日志输出可以配置log4j:

log4j.logger.com.gargoylesoftware.htmlunit=OFF

3、使用selenium也可以达到类似目的,selenium本身并不解析js,通过调用不同的浏览器驱动达到模拟浏览器的目的。selenium支持chrome、IE、firefox等多个真实浏览器驱动,也支持htmlunit作为驱动,还支持PhantomJS这种js开发的驱动。

driver类型优点缺点
真实浏览器driver真实模拟用户行为效率、稳定性低
HtmlUnit速度快js引擎(Rhinojs)不是主流的浏览器支持的,故对js支持的不够好
PhantomJS速度中等、模拟行为接近真实不能模拟不同/特定浏览器的行为

© 著作权归作者所有

共有 人打赏支持
xtuhcy

xtuhcy

粉丝 103
博文 16
码字总数 18277
作品 1
北京
后端工程师
加载中

评论(4)

xtuhcy
xtuhcy
建议你使用maven。依赖的项目包括:
httpclient,jsoup,fastjson,reflections,cglib,rhino,log4j,jmxutils,commons-lang3
z1y1m1
z1y1m1

引用来自“xtuhcy”的评论

引用来自“z1y1m1”的评论

public static void main(String[] args) throws Exception {
HtmlUnitDownloder downloader = new HtmlUnitDownloder();
HttpRequest request = new HttpGetRequest("http://item.jd.com/1455427.html");
request.setCharset("GBK");
GeccoEngine.create()
.classpath("com.geccocrawler.gecco.htmlunit")
.downloader(downloader)
//开始抓取的页面地址
.start(request)
//开启几个爬虫线程
.thread(1)
.timeout(1000)
.run();
}

GeccoEngine就没有downloader这个函数。

版本升级了,现在可以灵活的在每个@Gecco配置,稍后我修改一下该博客
还有能不能把依赖库都提供下,不然得话一大堆java.lang.NoClassDefFoundError
xtuhcy
xtuhcy

引用来自“z1y1m1”的评论

public static void main(String[] args) throws Exception {
HtmlUnitDownloder downloader = new HtmlUnitDownloder();
HttpRequest request = new HttpGetRequest("http://item.jd.com/1455427.html");
request.setCharset("GBK");
GeccoEngine.create()
.classpath("com.geccocrawler.gecco.htmlunit")
.downloader(downloader)
//开始抓取的页面地址
.start(request)
//开启几个爬虫线程
.thread(1)
.timeout(1000)
.run();
}

GeccoEngine就没有downloader这个函数。

版本升级了,现在可以灵活的在每个@Gecco配置,稍后我修改一下该博客
z1y1m1
z1y1m1
public static void main(String[] args) throws Exception {
HtmlUnitDownloder downloader = new HtmlUnitDownloder();
HttpRequest request = new HttpGetRequest("http://item.jd.com/1455427.html");
request.setCharset("GBK");
GeccoEngine.create()
.classpath("com.geccocrawler.gecco.htmlunit")
.downloader(downloader)
//开始抓取的页面地址
.start(request)
//开启几个爬虫线程
.thread(1)
.timeout(1000)
.run();
}

GeccoEngine就没有downloader这个函数。
模拟浏览器的神器 - HtmlUnit

随着Web的发展,RIA越来越多,JavaScript和Complex AJAX Libraries给网络爬虫带来了极大的挑战,解析页面的时候需要模拟浏览器执行JavaScript才能获得需要的文本内容。 好在有一个Java开源项...

杨尚川
2014/04/04
0
6
HtmlUnit 网络爬虫 菜鸟的学习笔记(一)

什么是HtmlUnit HtmlUnit是一个开源的浏览器模拟工具,可以方便我们模拟浏览器的行为,例如打开网页,提交表单等,这样我们可以用他来爬网页 官网下载:http://htmlunit.sourceforge.net/ ja...

木有芒果
2015/08/31
0
0
scrapy实战之定向抓取某网店商品资料

网络爬虫(web crawler)又称为网络蜘蛛(web spider)是一段计算机程序,它从互联网上按照一定的逻辑和算法抓取和下载互联网的网页,是搜索引擎的一个重要组成部分。一般的爬虫从一部分start...

索隆
2013/04/09
0
0
Burp Xss Scanner插件开发思路分享(附下载)

  *本文原创作者:lufei,本文属FreeBuf原创奖励计划,未经许可禁止转载   0×00 前言   Burp虽然自带xss检测,但是Pyload与数量都不是自己能掌控的。所以自己写一款Xss检测插件,对一...

FreeBuf
05/12
0
0
selenium之WebDriver

1、什么情况下选用WebDriver? (1)Selenium-1.0不支持的浏览器功能。 (2)multiple frames, multiple browser windows, popups, and alerts. (3)页面导航。 (4)下拉。 (5)基于AJAX的...

李长春
2011/07/20
0
3

没有更多内容

加载失败,请刷新页面

加载更多

活动招募 HUAWEI HiAI公开课·北京站-如何在4小时把你的APP变身AI应用

人工智能和机器学习是全球关注的新趋势,也是当前最火爆、最流行的话题。当你拿手机用语音助手帮你点外卖,智能推荐帮你把周边美食一网打尽;当你拿起P20拍照时,它将自动识别场景进行最美优...

华为终端开放实验室
25分钟前
1
0
匹配两位小数,js正则

var regex = /^\d*(\.[1-9]|\.\d[1-9])*$/ console.log(1.2,regex.test(1.2)); console.log(0.3,regex.test(0.3)); console.log(1.03,regex.test(1.03)); ......

微信小程序-暗潮
29分钟前
1
0
905. Sort Array By Parity - LeetCode

Question 905. Sort Array By Parity Solution 题目大意:数组排序,偶数放前,奇数在后,偶数的数之间不用管顺序,奇数的数之间也不用管顺序 思路:建两个list,一个放偶数,一个放奇数,最...

yysue
34分钟前
1
0
h5 禁止手机自带键盘弹出

html: <div style="width: 350px;margin:50px auto;"><input type="text" id="datePicker" class="date_picker form-control" placeholder="点击选择入住日期" /></div> js: $("#date......

Delete90
51分钟前
1
0
color透明度对照表

透明度百分比 数值 100% 不透明 FF 95% F2 90% E6 85% D9 80% CC 75% BF 70% B3 65% A6 60% 99 55% 8C 50% 80 45% 73 40% 66 35% 59 30% 4D 25% 40 20% 33 15% 26 10% 1A 5% 0D 0% 完全透明 ......

_无问西东
52分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部