支持Ajax的网页爬虫技术

普通web网站的信息,用下载URL的HTML源代码的方式就能满足基本需求,但是当今的使用web2.0技术的网站比较多,像一些电商网站、SNS网站等,在抓取网页的部分信息时,比如评论、滚动、延迟加载等,直接下载HTML源代码,就满足不了需求,需要定制出很多的ajax规则,通过多次请求来完成一个页面的信息收集。在这个情况下,爬虫的代码定制就比较复杂,开发和维护的难度增加。

  找了一些支持ajax抓取的开源工具比如 Crawlajax(?),是基于webdriver技术,需要有个界面来辅助,但是爬虫最好是无界面,减少加载时间,减少复杂程度,增加程序的便捷和稳定度,经过一番寻找,有个开源工具能基本满足需求,就是 HtmlUnit.

  这个工具集成了Rhino的javascript引擎,能解析HTML,模拟js的执行。通过HtmlUnit打开网页后,能获取当前的DOM结构,能执行js,能点击链接,能提交form表单,最大的优势是无界面。

 

import java.net.URL;

import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlPage;


public class Sample {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
	//设置访问ChromeDriver的路径

		  final WebClient webClient = new WebClient();   
		   
		  
	        // 构造一个URL,指向需要测试的URL,如http://www.javaeye.com   
	        URL url = new URL("http://item.jd.com/754320.html");   
	        // 通过getPage()方法,返回相应的页面   
	        webClient.getCurrentWindow().setInnerHeight(60000);
	        webClient.setCssEnabled(false); 
	        
	        HtmlPage page = (HtmlPage) webClient.getPage(url);  
	        
	        System.out.println("InnerHeight:"+webClient.getCurrentWindow().getInnerHeight());
	        
	        //System.out.println(page.getTitleText());   
	        System.out.println(page.asText()); 
	        
	}

}

   特别说明:HtmlUnit的不支持scroll消息,有一些网页是滚动在加载的情况,通过执行js语句让webcontrol滚动到底部,是没有效果的,国外也有人提出这个问题,但没有提供解决办法,折腾了许久,我终于找了一个办法绕过去,就是设置页面的高度为60000,一个很大的值,能容纳所有页面的可视范围,这样就能满足滚动加载的需求(就是让页面不需要滚动就可以了)。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值