htmlunit抓取动态网页(HtmlUnit+Jsoup背景在开发爬虫进行动态规则)
优采云 发布时间: 2022-02-26 00:17htmlunit抓取动态网页(HtmlUnit+Jsoup背景在开发爬虫进行动态规则)
HtmlUnit + Jsoup
背景
在开发爬虫用动态规则爬取数据的时候,遇到HtmlUnit登录后无法访问cookie的情况,网上的一系列文章都失效了;
HtmlUnit
可以理解为一个沙盒浏览器,会得到整个网页的最终显示代码(包括动态加载数据的js),人眼看到的就是你得到的
汤
只访问网页内容(不包括js执行后的动态内容),优点是可以通过jquery选择器提取元素,如#id、.class等。htmlUnit只能从文档原生js中提取
问题描述
html单元代码
/** HtmlUnit请求web页面 */
WebClient wc = new WebClient(BrowserVersion.CHROME);
wc.getOptions().setUseInsecureSSL(true);
wc.getOptions().setJavaScriptEnabled(true); // 启用JS解释器,默认为true
wc.getOptions().setCssEnabled(false); // 禁用css支持
wc.getOptions().setThrowExceptionOnScriptError(false); // js运行错误时,是否抛出异常
wc.getOptions().setTimeout(10 * 1000); // 设置连接超时时间 ,这里是10S。如果为0,则无限期等待
wc.waitForBackgroundJavaScript(10 * 1000); // 等待js后台执行30秒
wc.getOptions().setDoNotTrackEnabled(false);
//其他文章一贯的cookie设置方式-无效
//wc.getCookieManager().addCookie(new Cookie("domain域名","JSESSIONID","11"));
//改为以下方式
wc.addCookie("Cookie value长串不需要切割",new URL("目标网址"),"domain域名");
HtmlPage page = wc.getPage("目标网址");
另外遇到以下棘手问题(未解决)
<p>//失败:通过改变支持ajax支持方式
wc.setAjaxControllr(new NicelyResynchronizingAjaxController());
//失败:循环判断内容,增加js-ajax执行时间
for (int i = 0; i