htmlunit爬虫工具使用

Htmlunit是一款模拟浏览抓取页面内容的java框架,具有js解析引擎(rhino),可以解析页面的js脚本,得到完整的页面内容,特殊适合于这种非完整页面的站点抓取。


下文使用htmlunit版本:

<dependency>
	<groupId>net.sourceforge.htmlunit</groupId>
	<artifactId>htmlunit</artifactId>
	<version>2.14</version>
</dependency>

代码的实现非常简单,主要分为两种常用场景:

  1. 解析页面的js
  2. 不解析页面的js

public class CrawlPage {
	
	public static void main(String[] args) throws Exception {
		CrawlPage crawl = new CrawlPage();
		String url = "http://www.baidu.com/";
		System.out.println("----------------------抓取页面时不解析js-----------------");
		crawl.crawlPageWithoutAnalyseJs(url);
		System.out.println("----------------------抓取页面时解析js-------------------");
		crawl.crawlPageWithAnalyseJs(url);
	}
	
	/**
	 * 功能描述:抓取页面时不解析页面的js
	 * @param url
	 * @throws Exception 
	 */
	public void crawlPageWithoutAnalyseJs(String url) throws Exception{
		//1.创建连接client 
		WebClient webClient = new WebClient(BrowserVersion.CHROME);
		//2.设置连接的相关选项
		webClient.getOptions().setCssEnabled(false);
		webClient.getOptions().setJavaScriptEnabled(false);
		webClient.getOptions().setTimeout(10000);
		//3.抓取页面
		HtmlPage page = webClient.getPage(url);
		System.out.println(page.asXml());
		//4.关闭模拟窗口
		webClient.closeAllWindows();
	}
	
	/**
	 * 功能描述:抓取页面时并解析页面的js
	 * @param url
	 * @throws Exception 
	 */
	public void crawlPageWithAnalyseJs(String url) throws Exception{
		//1.创建连接client 
		WebClient webClient = new WebClient(BrowserVersion.CHROME);
		//2.设置连接的相关选项
		webClient.getOptions().setCssEnabled(false);
		webClient.getOptions().setJavaScriptEnabled(true);  //需要解析js
		webClient.getOptions().setThrowExceptionOnScriptError(false);  //解析js出错时不抛异常
		webClient.getOptions().setTimeout(10000);  //超时时间  ms
		//3.抓取页面
		HtmlPage page = webClient.getPage(url);
		//4.将页面转成指定格式
		webClient.waitForBackgroundJavaScript(10000);   //等侍js脚本执行完成
		System.out.println(page.asXml());
		//5.关闭模拟的窗口
		webClient.closeAllWindows();
	}
}


主要关注webClient的几个选项配置,
webClient.getOptions().setJavaScriptEnabled(true);  //需要解析js
webClient.getOptions().setThrowExceptionOnScriptError(false);  //解析js出错时不抛异常
 
需要将这两个开关打开才可以解析页面的js,css的渲染默认关掉就可以,因为爬虫本身没有界面,所以这块不需要,即下面的配置:
webClient.getOptions().setCssEnabled(false);


htmlunit在解析js的时候也有可能失败,这块还没有深入研究,后续使用遇到问题再记录

抓取到的内容默认以xml形式获得,即page.asXml(), 因为这样可以通过jsoup去解析html页面数据,jsoup是一个比较方便简洁的工具,后续整理一份关于jsoup的使用实践,欢迎大家来拍砖~~


相关文档:

htmlunit官网-http://htmlunit.sourceforge.net/gettingStarted.html

jsoup官网-http://jsoup.org/


  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值