【问题标题】:Simulating a browser on Google App Engine [closed]在 Google App Engine 上模拟浏览器 [关闭]
【发布时间】:2011-08-21 06:49:01
【问题描述】:

我想在谷歌应用引擎中使用 selenium 或 windmill 来抓取一个 JS 填充的网站。我知道windmill是用python和javascript写的。

这可能吗?如果是,如何插入库?
如果不是,您能否解释原因并提供替代方案?

谢谢。

更新

我搜索了一下,发现scrapy是纯python。
这行得通吗?它处理javascript吗?

【问题讨论】:

标签: python google-app-engine selenium scrapy windmill


【解决方案1】:

任何 python“抓取”库都不太可能在 appengine 上为您解释 javascript,因为它可能需要某种 C 扩展(如绑定到 spidermonkey 或 v8),这将违反 GAE 沙盒。

但是,如果您冒险涉足 Java 方面,您可能会有更多的运气。我知道你可以得到Rhino running on AppEngine,在env.js 的帮助下你可以模拟DOM,快速谷歌显示bunch of scraping tools for Java。这只是将它们捆绑在一起的问题。

HtmlUnit 看起来它试图这样做,但目前还不清楚它是否对 appengine 友好,因为它似乎是线程化的。

【讨论】:

  • 我认为您的意思是“解释”,而不是“中断”
【解决方案2】:

Selenium 和 windmill(现在认为是无人维护的)都是真正浏览器的控制器。通常它们会生成一个真正的浏览器(例如 Firefox)作为子进程并对其进行控制。我不认为你可以在 AppEngine 中做到这一点。我所知道的最接近纯代码浏览器的是htmlunit,即Java。据我所知,Python 没有等价物。

【讨论】:

  • 我的印象是它们也可以用作库,如下所示packtpub.com/article/web-scraping-with-python-part-2这是不正确的吗?我想既然它是用 python 和 JS 编写的,也许 GAE 可以运行它......你确定它不能完成吗?如果确实 htmlunit 是唯一的解决方案,有没有办法将它与我的 python 代码一起使用,比如包装器或在 python 代码中添加 java?
  • 对于它的价值,我最近听说有用于 webkit 的 Python 绑定(通过 Qt)。在 GAE 上也无用,但它比生成一个整个真正的浏览器要少一些,它可能只是运行浏览器引擎。
  • @Uri 他们也在使用真正的浏览器子进程方法:“......我们将使用 Windmill,因为它允许 JavaScript 代码在获取页面内容之前在 Web 浏览器中执行。”该示例使用 Firefox 显示它们。 Windmill 拥有的任何 JS 都在浏览器中运行。
【解决方案3】:

我相信 Selenium 和 Windmill 都只允许您控制浏览器,而不是模拟浏览器。他们希望在桌面环境中运行并驱动真正的浏览器,而这是 App Engine 无法做到的。

您可以使用URL Fetch APIBeautifulSoup 之类的HTML 解析器来处理来自App Engine 的页面抓取。

【讨论】:

  • 是的,它适用于获取静态内容。但是您需要一个 JavaScript 解释器和完整的 DOM 模型来获取生成的动态页面内容。
猜你喜欢
  • 2020-10-14
  • 2013-03-08
  • 1970-01-01
  • 2012-02-29
  • 1970-01-01
  • 2017-10-12
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
相关资源
最近更新 更多