有哪些支持JavaScript的好用屏幕抓取工具?

28

有没有一款好的测试套件或工具集,可以自动化网站导航 -- 并支持JavaScript -- 并从页面收集HTML代码?

当然,我可以使用BeautifulSoup直接抓取HTML。 但这对需要JavaScript的网站无济于事 :)


Selenium最终正是我所需要的。它非常灵活,可以与多种语言进行接口交互,包括Python,这使我能够存储内容并解析它,然后根据返回的内容指导Selenium的操作。感谢大家的回复! - Matt Howell
8个回答

26

您可以使用 SeleniumWatir 来控制真实的浏览器。

也有一些基于 JavaScript 的无界面浏览器:

  • PhantomJS 是一个无界面的 Webkit 浏览器。
    • pjscrape 是一个基于 PhantomJS 和 jQuery 的网页抓取框架。
    • CasperJS 是一个基于 PhantomJS 的导航脚本和测试工具,如果需要做更多事情而不仅仅是指向要被抓取的 URL。
  • Zombie 是为 Node.js 设计的。

个人而言,我最熟悉 Selenium,它支持使用很多种语言编写自动化脚本,并且有更成熟的工具,如优秀的 Firefox 扩展程序 Selenium IDE,可用于编写和运行测试用例,并可以将测试脚本导出为多种语言。


6

还可以使用HtmlUnit

HtmlUnit是一个“无GUI浏览器,用于Java程序”。 它模拟HTML文档,并提供API,允许您调用页面、填写表单、点击链接等等,就像在“正常”浏览器中一样。

它具有相当好的JavaScript支持(不断改进),并且能够与相当复杂的AJAX库一起工作,根据您想要使用的配置模拟Firefox或Internet Explorer。

它通常用于测试目的或从网站检索信息。


我认为HtmlUnit非常适合这个任务...而且它不需要浏览器来运行,因此您可以将其放入脚本中,并在服务器上自动运行。 - Spike Williams
它唯一支持的真正JavaScript是跟随位置重定向。对于爬取来说并没有什么帮助。 - Zombies

4

2
很难编写一个适用于任何网站的解决方案。每个导航菜单实现都可能是独特的。我曾经大量使用过爬虫,只要你知道要目标站点,以下是我的处理方式。
通常,如果分析导航菜单中所使用的javascript,就可以很容易地使用正则表达式提取出用于构建导航菜单的所有变量集。我从未使用过Beautiful Soup,但从你的描述中看来,它似乎只能在HTML元素上工作,而无法在脚本标签内工作。
如果你仍然遇到问题,或者需要模拟某些表单提交或ajax操作,请获取Firefox并安装LiveHttpHeaders插件。该插件将允许你手动浏览站点,并捕获被浏览时传递的url和cookie。这就是你的爬虫机器人需要发送请求以从目标Web服务器获得有效响应的内容。这还将捕获任何正在进行的ajax调用,在许多情况下,必须在你的爬虫中实现相同的ajax调用以获得所需的响应。

2
"Mozenda是一个很好的工具,也可以使用。"

1
请注意,JavaScript 的花哨效果会干扰浏览器对页面的内部 DOM 模型,但不会对原始 HTML 产生影响。

1

我一直在使用Selenium,发现它非常好用。 Selenium在浏览器中运行,并且可以与Firefox、Webkit和IE一起使用。 http://selenium.openqa.org/


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接