htmlunit 抓取网页(普通web网站的信息,用URL的HTML源代码的方式)
优采云 发布时间: 2022-01-06 00:03htmlunit 抓取网页(普通web网站的信息,用URL的HTML源代码的方式)
普通的web网站信息通过下载URL的HTML源代码就可以满足基本需求,但是现在有更多的网站使用web2.0技术,比如一些电子商务网站、SNS网站等,抓取网页的部分信息时,如评论、滚动、延迟加载等,直接下载HTML源代码不能满足需求,而且很多ajax规则需要自定义,通过多个请求完成一个页面信息的采集。在这种情况下,爬虫代码定制更加复杂,开发和维护难度增加。
找了一些支持ajax爬取的开源工具,比如Crawlajax(?),它是基于webdriver技术的,需要一个接口来辅助,但是爬虫最好没有接口,以减少加载时间,降低复杂度,增加程序的便利性和稳定性 经过一番搜索,有一个开源工具可以基本满足需求,那就是HtmlUnit。
该工具集成了 Rhino 的 javascript 引擎,可以解析 HTML 并模拟 js 的执行。通过HtmlUnit打开网页后,可以获取当前的DOM结构,执行js,点击链接,提交表单。最大的优点是它没有接口。
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 不支持滚动消息。一些网页在加载时滚动。执行js语句将webcontrol滚动到底部是无效的。国*敏*感*词*的大值,这样就可以满足滚动加载的需要(也就是页面不需要滚动。没关系)。