htmlunit 抓取网页(Htmlunit模拟浏览页面内容的java框架,具有js解析引擎(rhino))

优采云 发布时间: 2022-01-06 00:19

  htmlunit 抓取网页(Htmlunit模拟浏览页面内容的java框架,具有js解析引擎(rhino))

  Htmlunit 是一个模拟浏览和抓取页面内容的java框架。自带js解析引擎(rhino),可以解析页面的js脚本,得到完整的页面内容,特别适合这种不完整页面的站点抓取。

  以下使用的是htmlunit版本:

  

net.sourceforge.htmlunit

htmlunit

2.14

  代码的实现很简单,主要分为两种常见的场景:解析页面的js和不解析页面的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是一个更方便简洁的工具,后续有follow -up 关于jsoup的使用实践,欢迎大家来打砖~~

  相关文件:

  htmlunit官网-

  jsoup官网-

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线