htmlunit抓取动态网页(所说的问题试试)

优采云 发布时间: 2022-01-30 07:11

  htmlunit抓取动态网页(所说的问题试试)

  没错,最后我还是用 Selenium 来实现我在上一篇文章中提到的问题。我没有尝试其他任何东西。我只试过火狐引擎。整体效果我还是可以接受的。

  继续昨天的话题,既然要实现上一篇提到的问题,就需要一个可以执行js代码的框架。我的首选是htmlunit,先简单介绍一下htmlunit。以下段落摘自互联网。

  htmlunit 是一个开源的java页面分析工具。启动htmlunit后,会在底层启动一个非界面浏览器。用户可以指定浏览器类型:firefox、ie等。如果不指定,默认使用INTERNET_EXPLORER_7:

  WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6);

  只需调用:

  HtmlPage 页面 = webClient.getPage(url);

  可以获取页面的 HtmlPage 表示,然后通过:

  InputStream 是 = targetPage.getWebResponse().getContentAsStream()

  可以获取页面的输入流,从而获取页面的源代码,对于网络爬虫项目非常有用。

  当然,你也可以从page中获取更多的页面元素。

  重要的是,HtmlUnit 提供对执行 javascript 的支持:

  page.executeJavaScript(javascript)

  执行js后,返回一个ScriptResult对象,通过该对象可以获取执行js后的页面等信息。默认情况下,执行完js后,内部浏览器会进行页面跳转,跳转到执行完js后生成的新页面。如果js执行失败,则不会执行页面跳转。

  最后可以通过page.executeJavaScript(javascript).getNewPage()获取执行的页面。也就是说,这里需要人为地执行javascript,这显然不符合我的初衷。另外,我的水平可能太差了。我在爬新浪新闻的页面时总是出错。根据网络上的查询结果,最可能的错误原因是htmlunit在执行一些带参数的请求时,由于参数顺序或者编码问题,请求失败,报错。关键是,运行它后我没有得到我需要的结果。

  然后我寻找另一种解决方案。这时,我找到了 SeleniumWebDriver,这是我需要的解决方案。

  参考资料和例子,就可以开始使用了。示例代码如下。

<p> 1 File pathToBinary = new File("D:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");

2 FirefoxBinary ffBinary = new FirefoxBinary(pathToBinary);

3 FirefoxProfile firefoxProfile = new FirefoxProfile();

4 FirefoxDriver driver = new FirefoxDriver(ffBinary,firefoxProfile);

5

6

7 driver.get("http://cq.qq.com/baoliao/detail.htm?294064");

8

9 ArrayList list = new ArrayList();

10 list.add("http://www.sina.com.cn");

11 list.add("http://www.sohu.com");

12 list.add("http://www.163.com");

13 list.add("http://www.qq.com");

14

15 long start,end;

16

17 for(int i=0;i

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线