htmlunit爬虫工具使用--模拟浏览器发送请求,获取JS动态生成的页面内容
Htmlunit是一款模拟浏览抓取页面内容的java框架,具有js解析引擎(rhino),可以解析页面的js脚本,得到完整的页面内容,特殊适合于这种非完整页面的站点抓取。
下载地址:
https://sourceforge.net/projects/htmlunit/files/htmlunit/
maven地址:
<dependency> <groupId>net.sourceforge.htmlunit</groupId> <artifactId>htmlunit</artifactId> <version>2.18</version> </dependency>
代码的实现非常简单,主要分为两种常用场景:
- 解析页面的js
- 不解析页面的js
package cn.qlq.craw.httpunit; import com.gargoylesoftware.htmlunit.BrowserVersion; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlPage; /** * httpunit爬虫 * @author liqiang * */ public class HttpUnitCraw { public static void main(String[] args) throws Exception { HttpUnitCraw crawl = new HttpUnitCraw(); String url = "http://qiaoliqiang.cn/"; 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的几个选项配置,
需要将这两个开关打开才可以解析页面的js,css的渲染默认关掉就可以,因为爬虫本身没有界面,所以这块不需要,即下面的配置:
htmlunit在解析js的时候也有可能失败,这块还没有深入研究,后续使用遇到问题再记录
抓取到的内容默认以xml形式获得,即page.asXml(), 因为这样可以通过jsoup去解析html页面数据,jsoup是一个比较方便简洁的工具.
【当你用心写完每一篇博客之后,你会发现它比你用代码实现功能更有成就感!】
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了