【问题标题】:Web crawler: Using Perl's MozRepl module to deal with Javascript网络爬虫:使用 Perl 的 MozRepl 模块处理 Javascript
【发布时间】:2011-10-14 09:18:57
【问题描述】:

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

Firefox 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. 最后,如果您说前两个问题可以回答“是”,那么如果您能帮助我进行实际编码,那就太好了。例如。在上面的代码中,缺少的基本部分是'save'-command。 (也许使用 Firefox 的 saveDocument 函数?)

【问题讨论】:

    标签: javascript perl firefox


    【解决方案1】:

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

    如果您能发现正确的发送请求,那么您将得到正确的响应。

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

    更简单的方法是使用一个工具来为您捕获生成的请求,无论该请求是否由 JS 创建,然后您就可以制作您的抓取代码 创建您想要的请求。

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

    您进行设置,然后正常浏览网站以访问您要抓取的页面, WSP 将为您记录所有请求和响应。

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

    【讨论】:

    • 我不知道 AT&T 的 WSP 工具。这确实是一个方便的脚本。谢谢,我使用它并实际上解决了我的问题。谢谢 tadmc!
    猜你喜欢
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多