[Jsoup] 使用HtmlUnit + Jsoup解析js动态生成的网页

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

版权所有:  bluetata  dietime1943@gmail.com
本文地址:  http://blog.csdn.net/dietime1943/article/details/79035779
转载请注明来源/作者

在使用Jsoup过程中会遇到无法解析通过javascript动态生成的html网页, 在Jsoup交流群中也经常会有人问到这个问题, 本文的解决办法是使用HtmlUnit+Jsoup来解析动态dynamic网页.

一般会出现动态js加载的网页源码为, 某些关键性数据, 比如某简历网站的年份, 薪金等敏感数据信息, 也比如某些网站动态加载出来的新闻, 公告, 也比如某些网站在生成快照的时候的更新时间, 这些都可能是通过js动态生成的DOM元素后进行加载的.

Jsoup专注的是解析html, 利用类似JQuery的API进行快速解析html, 并没有将自身的定位于模拟浏览器上, 所以并不是现阶段某些人说的Jsoup对于模拟浏览器不足等等, 希望大家在给同事讲解或者写博客的时候注明。而对于模拟浏览器, 进行无窗口化的访问, 有很多优秀的开源框架, 比如HttpClient, 也比如今天介绍的HtmlUnit, 亦或者Selenium.

“ 现如今为止Jsoup-1.10.4是无法动态加载js内容的, 官方作者Jonathan Hedley给予的回复是:“Javascript is not supported. Jsoup parses HTML.”。”HtmlUnit和Selenium本身都是做测试的开源框架, 本身Selenium底层也使用了HtmlUnit, 所以在本文直接介绍使用HtmlUnit进行处理动态js加载的Html问题.

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

如果是使用Maven构建项目, 请参照如下的配置, 如果是直接导入jar包, 直接到官网下载或者加博文后的Jsoup交流群, 在群文件中可以下载jar包和API帮助文档

 
  1. <!-- https://mvnrepository.com/artifact/net.sourceforge.htmlunit/htmlunit -->

  2. <dependency>

  3. <groupId>net.sourceforge.htmlunit</groupId>

  4. <artifactId>htmlunit</artifactId>

  5. <version>2.29</version>

  6. </dependency>

示例代码:

 
  1. public static void main(String[] args) throws FailingHttpStatusCodeException, MalformedURLException, IOException {

  2.  
  3.         // 屏蔽HtmlUnit等系统 log

  4.         LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log","org.apache.commons.logging.impl.NoOpLog");

  5.         java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF);

  6.         java.util.logging.Logger.getLogger("org.apache.http.client").setLevel(Level.OFF);

  7.  
  8. String url = "https://bluetata.com/";

  9. System.out.println("Loading page now-----------------------------------------------: "+url);

  10.  
  11. // HtmlUnit 模拟浏览器

  12. WebClient webClient = new WebClient(BrowserVersion.CHROME);

  13. webClient.getOptions().setJavaScriptEnabled(true); // 启用JS解释器,默认为true

  14. webClient.getOptions().setCssEnabled(false); // 禁用css支持

  15. webClient.getOptions().setThrowExceptionOnScriptError(false); // js运行错误时,是否抛出异常

  16. webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);

  17. webClient.getOptions().setTimeout(10 * 1000); // 设置连接超时时间

  18. HtmlPage page = webClient.getPage(url);

  19. webClient.waitForBackgroundJavaScript(30 * 1000); // 等待js后台执行30秒

  20.  
  21. String pageAsXml = page.asXml();

  22.  
  23. // Jsoup解析处理

  24. Document doc = Jsoup.parse(pageAsXml, "https://bluetata.com/");

  25. Elements pngs = doc.select("img[src$=.png]"); // 获取所有图片元素集

  26. // 此处省略其他操作

  27. System.out.println(doc.toString());

  28. }

 

● Jsoup学习讨论QQ群:50695115

● Jsoup爬虫代码示例及博客内源码下载:https://github.com/bluetata/crawler-jsoup-maven

● 更多Jsoup相关文章,请查阅专栏:【Jsoup in action】

注:本文原创由`bluetata`发布于blog.csdn.net、转载请务必注明出处。

 

Flag Counter

--------------------- 本文来自 bluetata 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/dietime1943/article/details/79035779?utm_source=copy

htmlunit爬取javascript、Ajax 动态生成网页jsoup解析XML文档 最近接到一个项目,需要爬取一个网站的生成的xml数据。     刚开始时,觉得这是一个非常容易的事情,以前也用过htmlunit爬取网站。但是写完代码发现连登陆都进不了,何谈爬取数据了。不说直接上代码: final WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER_9);// 设置浏览器类型,由 阅读详情

相关推荐

java htmlunit jsoup实现爬取网页img标签中的图片

java htmlunit jsoup实现爬取网页img标签中的图片 htmlunit 是一款开源的java 页面分析工具,可以模拟浏览器执行js代码并获取执行之后的html网页代码。 jsoup 是一款Java 的HTML解析器,可以使用简单的语法获取html标签中属性的值。 如果获取到了js执行之后的img标签的src属性值,就可以根据这个图片的url将图片下载到本地。 需要的maven依赖: <!--jsoup--> <dependency> <groupI

qq_46239972的博客 1707

jsoup动态生成html,Jsoup获取动态js生成的内容

Jsoup本身是只能获取到静态页面的数据,并无法获取动态生成内容,所以单单使用jsoup是无法获取js生成的内容的。我这里使用htmlunit获取网页内容后,将网页转换成xml格式,再通过jsoup进行解析1.依赖导入一般Jsoup和HttpClient都是一起使用的,版本随意,可以无脑选择新版本org.apache.httpcomponentshttpclient4.5.2org.jso...

weixin_32161925的博客 1308

HtmlunitJsoup组建Java爬虫

目录

阿符的百宝箱 634

Jsoup解析html某片段的问题

案例 问题分析 解决办法案例在使用jsoup解析html中的某部分片段时,有时候会遇到解析不出字段。下面以案例进行讲解。<tr> <td class='center'> <font class='blue'> 北京 </font> </td> <td> 36175 </td> <td>

qy20115549的博客 4705

Java学习笔记:爬虫-用Jsoup解析网页

兄弟遍历方法siblingElements(),firstElementSibling(),lastElementSibling();Documentdoc=Jsoup.connect(“https//www.youzack.com/”).get();层级之间遍历parent(),children(),child(intindex)1、爬虫程序代替人的人工操作,自动获取网页内容,并且从其中提取出来有价值信息。3、Jsoup简单易用的Http请求操作以及查找元素的操作。......

薛定谔的猫 2391

java jsoup爬取动态网站_Jsoup简明教程

jsoup是一个操纵HTML的Java库。它提供了很多便利的API,我们可以用HTML5 DOM方法和CSS选择器来获取URL,提取和操作数据。先看一个简单的例子,新建一个Maven项目:在项目的pom.xml文件中添加如下依赖:<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup --> <dependency> ...

weixin_29882269的博客 8865

Jsoup配合使用htmlunit爬取动态页面

今天使用jsoup在做爬虫的功能的时候,发现jsoup只能爬取静态页面,对于ajax和json动态生成的页面的支持并不友好。 于是我尝试直接用请求发送param和数据头,希望能直接返回json数据,但可能是由于网站接口不支持没能成功。 在尝试其他方法之后,从网上发现可以使用htmlunit模拟浏览器,生成动态的网页之后,再用jsoup对生成的动态网页进行解析 以下是pom.xml maven依赖代码 <dependencies> <!--jsoup-->

范栩的博客 2870

java爬虫爬取动态页面记录

最开始采用的HttpClient获取页面+Jsoup分析页面,但是获取不到想要的页面内容,发现自己想要的数据是js生成的,HttpClient加了头和Cookie还是获取不到,最后采用的htmlunit获取页面就可以了。 WebClient webClient=new WebClient(); WebClientOptions options = webClient.getOptions(); options.setJavaScriptEnabled(true

wflsyf的博客 1410

htmlunit配合jsoup获取动态页面

jsoup只能解析静态的html页面,如果页面由js动态生成的,jsoup就无从下手了,使用htmlunit可以获取js运行后的页面,还可以模拟浏览器点击页面上的元素等,非常强大,本文介绍htmlunit的简单使用。步骤如下: 1、引入依赖 <dependency> <groupId>net.sourceforge.htmlunit</groupId&g...

lilianggui的博客 2853

HtmlUnit爬取js动态生成网页

private Document doHttp(String url) throws IOException { //构造一个webClient 模拟Chrome 浏览器 WebClient webClient = new WebClient(BrowserVersion.CHROME); //支持JavaScript web...

皓月星辰 1971

HtmlUnit、httpclient、jsoup爬取网页信息并解析

1.爬取页面效果图点击"百度一下"按钮前页面650) this.width=650;" src="http://s4.51cto.com/wyfs02/M02/7E/12/wKiom1b2ZvTxse7gAABaAdzthoY111.png" title="捕获.PNG" alt="wKiom1b2ZvTxse7gAABaAdzthoY111.png" />点击"百度一下"按钮后页面650) th

jethai的博客 5423

JsoupHtmlUnit:两大Java爬虫工具对比解析

JsoupHtmlUnit是Java中用于网页抓取的两个重要工具,各有其特点和适用场景。Jsoup是一个轻量级的HTML解析库,专注于快速解析静态HTML页面,支持DOM树解析、CSS选择器查询、HTML净化与格式化等功能,适用于高频抓取和资源受限的环境。然而,它无法处理JavaScript动态加载的内容HtmlUnit则是一个无头浏览器引擎,能够模拟完整的浏览器行为,包括执行JavaScript、处理AJAX请求、管理Cookies和模拟用户交互,适用于需要处理动态内容的场景,但资源消耗较大。选择工具

weixin_65685799的博客 2108

HtmlUnit+Jsoup 解决爬虫无法解析执行javascript的问题

本人最近在研究爬虫。作为一个新手。研究了些爬虫框架,发现所有开源的爬虫框架很多,功能也很齐全,但唯独遗憾的是,目前还没有发现那个爬虫对js完美的解释并执行。看了浅谈网络爬虫爬js动态加载网页(二)之后很有感慨,首先对博主的钻研精神季度敬佩。虽然该文中第二和第三种方案不怎么靠谱,但能想到这些方案,说明博主的思维发散性很强,不会局限于单方向钻牛角尖式的思考。不过很遗憾,因为我就是这样的人。我...

diaogeqiupc99379的专栏 728

Jsoup + HtmlUtil 实现网易新闻网页爬虫

1.这里先说明为什么要用HtmlUtil,仅用Jsoup不行吗? 如果用Jsoup的方法,那么爬取网页的代码如下,这也是比较简单的形式了。 Document docu1=Jsoup.connect(url).get(); 用上述代码只能爬取静态网页的,当遇到动态网页就会发现你想要的内容爬取不出来。因此我用到了HtmlUtil。 具体代码如下:这里面的方法getHtmlFromUrl(St...

Liam_fang的博客 2942

HtmlUnit+Jsoup使用记录

文章目录HtmlUnit+Jsoup使用记录一、软件版本二、使用记录三、其它1.HttpClient Fluent API的使用 HtmlUnit+Jsoup使用记录 使用 HtmlUnit 对动态页面进行渲染,通过 Jsoup 解析页面内容 一、软件版本 HtmlUnit官网: http://htmlunit.sourceforge.net/ Jsoup官网: https://www....

Z-NOTE 684

java爬虫,爬取js渲染完成后的网页

在爬取bilibili的时候发现通过一般的客户端获取网页内容,会发现网页全是乱码,爬取百度等网页不会出现乱码,在我排除编码问题后,推测bilibili的网页采用js加密了网页使用 第一步加入maven依赖 一个是必要的htmlunit框架用来获取渲染完成后的网页 另一个是jsoup爬虫框架,用来获取网页中想要获取内容 <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup --> <dependency> &

诗水人间 12万+
上一篇: 使用fiddle抓包使用教程
下一篇: CentOS7 安装Flash插件
Yeung先森
博客等级 码龄11年 5粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值