什么是使用 Javascript 支持进行屏幕抓取的好工具?

IT技术 javascript screen-scraping
2021-01-29 22:57:56

是否有一个很好的测试套件或工具集可以自动进行网站导航——有 Javascript 支持——并从页面中收集 HTML?

当然,我可以用 BeautifulSoup 直接抓取 HTML。但这对需要 Javascript 的网站没有好处。:)

6个回答

您可以使用SeleniumWatir来驱动真正的浏览器。

还有一些基于 JavaScript 的无头浏览器:

  • PhantomJS是一个无头 Webkit 浏览器。
    • pjscrape是一个基于 PhantomJS 和 jQuery 的抓取框架。
    • CasperJS是一个基于 PhantomJS 的导航脚本和测试实用程序,如果您需要做的不仅仅是指向要抓取的 URL。
  • 僵尸Node.js的

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

也可以使用HtmlUnit

HtmlUnit 是一个“用于 Java 程序的无 GUI 浏览器”。它为 HTML 文档建模并提供一个 API,允许您调用页面、填写表单、单击链接等……就像您在“普通”浏览器中所做的一样。

它具有相当好的 JavaScript 支持(不断改进),甚至可以使用非常复杂的 AJAX 库,根据您要使用的配置模拟 Firefox 或 Internet Explorer。

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

真正的 javascript 支持是跟随位置重定向。它不会对刮擦有帮助。
2021-03-30 22:57:56
我同意 HtmlUnit 对此有好处......而且它不需要浏览器来运行,所以你可以把它放在一个脚本中并让它在服务器上自动运行。
2021-04-04 22:57:56

Selenium 现在包装了 htmlunit,因此您不再需要启动浏览器。新的 WebDriver api 也非常易于使用。第一个例子使用 htmlunit 驱动

编写一个适用于任何任意站点的解决方案将是非常困难的。每个导航菜单实现都可以非常独特。我在刮刀方面做了很多工作,而且,如果您知道要定位的站点,那么我将如何处理它。

通常,如果您分析导航菜单中使用的特定 javascript,使用正则表达式提取用于构建导航菜单的整个变量集是相当容易的。我从未使用过 Beautiful Soup,但从您的描述来看,它似乎只能在 HTML 元素上工作,而不能在脚本标签内工作。

如果您仍然遇到问题,或者需要模拟某些表单 POST 或 ajax,请获取 Firefox 并安装LiveHttpHeaders插件。此插件将允许您手动浏览站点并捕获正在导航的 URL 以及在手动浏览期间传递的任何 cookie。这就是您需要刮板机器人发送请求以从目标网络服务器获得有效响应的内容。这也将捕获正在进行的任何 ajax 调用,并且在许多情况下,必须在您的抓取工具中实现相同的 ajax 调用才能获得所需的响应。

Mozenda也是一个很好的工具。