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

这里拿地址【http://cq.qq.com/baoliao/detail.htm?294064】来测试,通过查看该页面源码,可以发现,该页面文章标题,内容,浏览量都是采用占位符的形式,在页面加载时,通过js替换之,下面代码获取该文章浏览量字段。

public void testCrawler() throws Exception {
/**HtmlUnit请求web页面*/
WebClient wc = new WebClient();
wc.getOptions().setJavaScriptEnabled(true); //启用JS解释器,默认为true
wc.getOptions().setCssEnabled(false); //禁用css支持
wc.getOptions().setThrowExceptionOnScriptError(false); //js运行错误时,是否抛出异常
wc.getOptions().setTimeout(10000); //设置连接超时时间 ,这里是10S。如果为0,则无限期等待
HtmlPage page = wc.getPage("http://cq.qq.com/baoliao/detail.htm?294064");
String pageXml = page.asXml(); //以xml的形式获取响应文本 /**jsoup解析文档*/
Document doc = Jsoup.parse(pageXml, "http://cq.qq.com");
Element pv = doc.select("#feed_content span").get(1);
System.out.println(pv.text());
Assert.assertTrue(pv.text().contains("浏览")); System.out.println("Thank God!");
}

附上maven配置:

<dependency>
<!-- jsoup HTML parser library @ http://jsoup.org/ -->
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.7.2</version>
</dependency>
<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
<version>2.13</version>
</dependency>

更多信息请查看个人博客:http://www.iamcoder.net

最新文章

  1. JS中对象排序
  2. D. Game with Strings
  3. DTMF Stresstesting
  4. getViewById和getLayoutInflater().inflate的用法
  5. 使用ul,添加新闻信息列表
  6. C#和Java中执行SQL文件脚本的代码(非常有用)
  7. SQL查询重复记录
  8. 新人如何运行Faster RCNN的tensorflow代码
  9. 8、Dockerfile详解
  10. http note
  11. arm 算力运算
  12. NOSQL快速入门
  13. JetBrains PyCharm专业版激活
  14. mysql跨库联表查询
  15. mysql count group by统计条数方法
  16. pymysql中如何将动态的插入数据库中
  17. 11-[CSS]-标准文档流,display,浮动,清除浮动,overflow
  18. c++的类型转换(转)
  19. DCOM初步窥探二
  20. TPL之延续任务

热门文章

  1. PHP弱类型:WordPress Cookie伪造
  2. c++ 静态多态与动态多态
  3. 腾讯出品的抓包工具Rythem
  4. Course(简单的字符串处理问题)
  5. swith
  6. Android Develop【转】
  7. JS+canvas实现人机大战之五子棋
  8. hdu 2203亲和串 (kmp)
  9. Servlet 的基本架构
  10. [LeetCode]题解(python):132-Palindrome Partitioning II