网页解析利器——HtmlUnit
2017-06-11 08:34
127 查看
网页解析利器——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还是比较好用的。
相关文章推荐
- HtmlAgilityPack——解析html和采集网页的神兵利器
- 解析html和采集网页的神兵利器
- htmlunit简单百度搜索,网页解析
- Python网页解析利器BeautifulSoup安装使用介绍
- HtmlUnit、httpclient、jsoup爬取网页信息并解析
- C# 解析网页的利器
- HtmlUnit、httpclient、jsoup爬取网页信息并解析
- 网页解析利器goose的python3版本安装与测试
- Android 神兵利器之通过解析网页获取到的API数据合集,可拿来就用
- HtmlUnit解析动态网页并采集网页列表到Excel
- Android 神兵利器之通过解析网页获取到的API数据合集,可拿来就用
- 网页解析利器——jsoup
- HtmlUnit、httpclient、jsoup爬取网页信息并解析
- 史林枫:开源HtmlAgilityPack公共小类库封装 - 网页采集(爬虫)辅助解析利器【附源码+可视化工具推荐】
- golang解析网页利器goquery的使用方法
- HtmlAgilityPack——解析html和采集网页的神兵利器
- htmlunit - 解析HTML 的利器
- HtmlAgilityPack——解析html和采集网页的神兵利器
- HtmlUnit、Httpclient、Jsoup爬取网页信息并解析
- 网页解析利器Jsoup