【问题标题】:Perl: Parsing AJAX loaded contentPerl:解析 AJAX 加载的内容
【发布时间】:2015-10-06 04:18:23
【问题描述】:

这是一个关于 Web 2.0 之后 perl 网络爬虫的古老问题;他们根本无法解析动态加载的页面,因为他们需要某种 JavaScript 引擎来呈现页面。这个问题比简单地渲染 JavaScript 要复杂得多,因为 Perl 还必须能够管理和维护 DOM。

似乎WWW::SeleniumWWW::Mechanize::Firefox 能够通过使用FireFox(或其他浏览器)为其进行渲染来完成此操作。然而,V8 变得如此流行(正如 Node.js 所见),所以我很好奇是否有任何新的库使用它,或者有一个独立于浏览器的解决方案,我不知道。

我通常可能认为这是一个可以解决的问题,但是在谷歌搜索和 Stack Overflow 上结果很少,不应该有太多的解决方案(如果有的话)。


相关(旧)问题:

【问题讨论】:

  • 我有点困惑......“独立于浏览器的解决方案”是什么意思?如果您正在抓取网页,则页面中必然会存在差异,具体取决于您使用哪种浏览器来呈现它,无论是 Firefox 还是像 PhantomJS 这样的无头浏览器。你的意思是你想要一个不需要安装 Firefox 的解决方案吗?
  • @ThisSuitIsBlack不是;从技术上讲,Mechanize 是一个浏览器。我试图获得的是能够呈现 JS 操作的结果,而无需使用第三方浏览器或安装另一个浏览器二进制文件。
  • 换句话说,您想要一个纯 Perl Javascript 引擎?也许试试Javascript.pm,虽然那不是浏览器;我认为您必须自己将其与机械化集成。我能找到的所有其他东西都需要一个外部二进制文件:例如,WWW::Mechanize::PhantomJS 需要您安装 PhantomJS; JavaScript::V8,也不是浏览器,需要安装V8。
  • @ThisSuitIsBlack不是。那是几年前不存在的东西,但现在希望它可以,特别是因为这些天新的解决方案更加直接。 SO 的观众可能知道不太流行的模块,在本例中是一个 PP 版本。我不介意 JavaScript::V8,但我认为它没有集成到 Mechanize 中。将两者分开更容易。使用 mechanize 和 firefox/phantom 费用,比如太多的中间件。

标签: perl


【解决方案1】:

您提到了 Selenium,但有更高版本的 Selenium::Remote::Driver 可与 selenium 2.0 集线器配合使用。

我知道你也可以在没有 Selenium 集线器的情况下使用它 没有独立服务器(这部分我没用过)

从 v0.25 开始,可以在没有独立的情况下使用此模块 服务器 - 也就是说,您不需要 JRE 或 JDK 来运行您的 硒测试。请参阅 Selenium::Chrome、Selenium::PhantomJS 和 Selenium::Firefox 了解详情。如果您想要其他浏览器 除了这些,在 Github 上给我们打个招呼。

PhantomJS 可能很有趣,因为它是一个无头浏览器

这可能不是答案,但评论太长了

【讨论】:

  • 这可能很有趣。还有一个用于 Mechanize 的插件:search.cpan.org/~corion/WWW-Mechanize-PhantomJS-0.02/lib/WWW/… 虽然,使用 Firefox 作为 headless 似乎可以完成同样的事情。我想我无法真正避免使用 3rd 方渲染器,Mechanize 似乎没有任何更原生的东西(希望会有 WWW::Mechanize::V8)
  • @vol7ron FWIW,我认为 WWW::Mechanize::PhantomJS 的支持不如 WWW::Mechanize::Firefox。大约一年前,我为渲染问题提交了bug report and patch,但没有任何回复。对于那个特定的项目,我最终只使用了 PhantomJS 而不是 Perl,尽管我想我也可以使用我的补丁版本的模块。我同意,一个纯 Perl 支持 Javascript 的浏览器会很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-12
  • 1970-01-01
  • 2011-10-31
  • 2013-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多