【发布时间】:2015-10-06 04:18:23
【问题描述】:
这是一个关于 Web 2.0 之后 perl 网络爬虫的古老问题;他们根本无法解析动态加载的页面,因为他们需要某种 JavaScript 引擎来呈现页面。这个问题比简单地渲染 JavaScript 要复杂得多,因为 Perl 还必须能够管理和维护 DOM。
似乎WWW::Selenium 和WWW::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