javascript - 网络爬虫 : Using Perl's MozRepl module to deal with Javascript

标签 javascript perl firefox

我正在尝试使用网络爬虫来保存几个网页。通常我更喜欢使用 perl 的 WWW::Mechanize 模块。然而,据我所知,我试图抓取的网站上有许多似乎很难避免的 javascript。因此我研究了以下 perl 模块

火狐 MozRepl extension本身完美无缺。理论上,我可以按照开发人员教程中显示的方式使用终端浏览网站。但是,我对 javascript 一无所知,因此很难正确使用这些模块。

所以我喜欢从这里开始:Morgan Stanley

对于“公司 - 截至 2011 年 10 月 14 日”下的几家上市公司,我想保存它们各自的页面。例如。单击第一个上市公司(即“1-800-Flowers.com, Inc”),将使用两个参数调用 javascript 函数 -> dtxt('FLWS.O','2011-10-14'),生成所需的新页面。我现在喜欢保存在本地的页面。

对于 perl 的 MozRepl 模块,我想到了这样的事情:

use strict;
use warnings;
use MozRepl;

my $repl = MozRepl->new;
$repl->setup; 
$repl->execute('window.open("http://www.morganstanley.com/eqr/disclosures/webapp/coverage")');

$repl->repl_enter({ source => "content" });
$repl->execute('dtxt("FLWS.O", "2011-10-14")');

现在我想保存生成的 HTML 页面。

因此,我想生成的所需代码应该访问几家公司的 HTML 站点并简单地保存网页。 (这里有例如三个公司:MMM.N、FLWS.O、SSRX.O)

  1. 是否正确,我无法绕过页面的 javascript 函数,因此无法使用 WWW::Mechanize
  2. 在问题 1 之后,提到的 perl 模块是否是一种可行的方法?
  3. 最后,如果您说前两个问题可以回答"is",那么如果您能帮我解决实际编码问题,那就太好了。例如。在上面的代码中,缺少的重要部分是 'save'-command。 (也许使用 Firefox 的 saveDocument 功能?)

最佳答案

网络通过 HTTP 请求和响应工作。

如果您能找到合适的请求发送,那么您就会得到合适的响应。

如果目标站点使用JS构成请求,那么你可以执行JS, 或分析它的作用,以便您可以用您正在使用的语言做同样的事情。

一个更简单的方法是使用一个工具,它会为您捕获结果请求,无论该请求是否由 JS 创建,然后您就可以编写您的抓取代码 创建您想要的请求。

AT&T的“Web Scraping Proxy”就是这样一个工具。

您设置好它,然后正常浏览网站以到达您想要抓取的页面, WSP 将为您记录所有请求和响应。

它以 Perl 代码的形式记录它们,然后您可以对其进行修改以满足您的需要。

关于javascript - 网络爬虫 : Using Perl's MozRepl module to deal with Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7765537/

相关文章:

javascript - 尝试在 Canvas 中绘制弧线 - 奇怪的行为

javascript - 使用变量更改样式

javascript - 尝试运行 Javascript,使用函数将小数转换为其他基数

perl - 如何确定gettext的安装版本?

regex - 为什么包含确切字符串的正则表达式无法匹配成功?

css - 触发 "block formatting context"时, float 元素在 Chrome/Firefox 中呈现不同

java - 为什么 Selenium 在 Google 主页上识别一个按钮而不是两个按钮

javascript - 骑行星空动画

perl - 如何在一个 Perl 命令中创建目录和父目录?

wordpress - youtube嵌入式视频出现奇怪的视频渲染问题