网页解析利器——HtmlUnit
来源:互联网 发布:汽车单片机控制灯光 编辑:程序博客网 时间:2024/05/16 18:29
网页解析利器——HtmlUnit
最近做京津冀路网的爬取,遇到一个很麻烦的问题,就是很多网页上有js脚本,用普通的,例如HtppClient,根本无法做到解析js脚本,后来,百度了一下,找到了一个,是Java从jdk5之后扩展的ScriptEngineManager,使用如下方法
ScriptEngineManager manager = new ScriptEngineManager(); // 得到javascript脚本引擎 ScriptEngine engine = manager.getEngineByName("javascript"); try { // 开始运行脚本,并返回当前的小时 Double hour = (Double)engine.eval("var date = new Date();" +"date.getHours();");
这种Java自带的虽然不用导入外部的包,但是在实际开发中,这种API经常会报找不到window、document等等,因为ScriptEngineManager里面并没有解析js的引擎,所以这种方案只得作废。jsoup是号称解析网页很强大的工具,但是只能解析静态的网页,同样不能解析动态的网页。这时候,用到了一个开源的网页分析工具,HtmlUnit,这种工具自带有js的解析和css的解析,能够很好的解析出带有js的网页,但是一个缺点就是解析网页的速度太慢,因为要解析js,所以解析网页的速度就慢下来了,如果有时候业务需要不用解析js的话,可以选择关闭js解析和css解析器,这样解析网页速度会比较快了,代码如下:
public static void main(String[] args) throws Exception{ String str; //创建一个webclient WebClient webClient = new WebClient(); //htmlunit 对css和javascript的支持不好,所以请关闭之 webClient.getOptions().setJavaScriptEnabled(false); webClient.getOptions().setCssEnabled(false); //获取页面 HtmlPage page = webClient.getPage("http://www.baidu.com/"); //获取页面的TITLE str = page.getTitleText(); System.out.println(str); //获取页面的XML代码 str = page.asXml(); System.out.println(str); //获取页面的文本 str = page.asText(); System.out.println(str); //关闭webclient webClient.closeAllWindows(); }
如果想要解析网页中的js,那么就不用关闭js和css解析器,在HtmlUnit中,这两个功能默认是开启的,网上找资料中,看到很多人说用HtmlUnit解析js并不起作用,这是因为HtmlUnit解析的时候,时间会比较长,有时候还没等程序解析完,就执行了输出结果的程序,所以,最终看不到解析后的结果,所以,可以暂时将该线程挂起,或者让当前线程睡眠一段时间,再去获取结果,优化方案如下:
// 新建一个web客户端 WebClient webClient = new WebClient(BrowserVersion.FIREFOX_52); // 解析获取的页面 HtmlPage page = webClient.getPage("https://www.baidu.com"); Thread.sleep(10000); System.out.println("------获取的网页------"); System.out.println(page.asXml()); webClient.close();
所以,HtmlUnit还是比较好用的。
阅读全文
0 0
- 网页解析利器——HtmlUnit
- htmlunit - 解析HTML 的利器
- 网页解析利器——jsoup
- python网页解析利器——BeautifulSoup
- 网页解析利器Jsoup
- 网页解析利器Jsoup
- HtmlUnit解析动态网页并采集网页列表到Excel
- HtmlUnit、httpclient、jsoup爬取网页信息并解析
- HtmlUnit、httpclient、jsoup爬取网页信息并解析
- HtmlUnit、Httpclient、Jsoup爬取网页信息并解析
- HtmlAgilityPack——解析html和采集网页的神兵利器
- HtmlAgilityPack——解析html和采集网页的神兵利器
- HttpWatch——网页分析利器
- Synthasite—在线网页制作的利器!
- 网络爬虫_网页登录(苏宁 有验证码)—基于HtmlUnit
- C++解析xml利器—tinyxml图解法
- C++解析xml利器—tinyxml图解法
- C++解析xml利器—tinyxml图解法
- 【linux】ubuntu php7.0 discuz mysqli_connect()不支持的解决方案
- bzoj 3218: a + b Problem (可持久化线段树+最小割)
- 用js在页面上显示一个Hello Word
- 工业大数据漫谈15:工业大数据与工业4.0的关系
- 二叉搜索树的查找
- 网页解析利器——HtmlUnit
- 微信移动端数据库组件WCDB系列(一)-iOS基础篇
- 免费馅饼
- php与js,jsp等语言特性对比
- 计蒜之道复赛D题—— 百度地图导航
- 二叉搜索树的遍历
- win7共享打印机访问不了怎么办
- 精通CSS第四章灵活的圆角框&border-radius
- ECMAScript6(10):Symbol基本类型