htmlunit抓取动态网页(HtmlUnit+Jsoup背景在开发爬虫进行动态规则)
优采云 发布时间: 2021-09-30 12:03htmlunit抓取动态网页(HtmlUnit+Jsoup背景在开发爬虫进行动态规则)
HtmlUnit+Jsoup
背景
当开发一个通过动态规则捕获数据的爬虫程序时,htmlunit在登录后无法通过cookie访问数据,并且互联网上的一系列文章无效
HtmlUnit
它可以理解为一个沙盒浏览器,它将获得整个网页的最终显示代码(收录动态加载数据的JS),人们看到的就是他们得到的
Jsoup
只能获取网页内容(不包括JS执行后的动态内容)。优点是可以通过jQuery选择器提取元素,例如#id、,。类等。htmlunit只能从本机JS文档中提取
问题描述
htmlUnit代码
/** 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