繁体   English   中英

Web爬虫:使用Perl的MozRepl模块来处理Javascript

[英]Web crawler: Using Perl's MozRepl module to deal with Javascript

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

Firefox MozRepl扩展本身运行良好。 我可以使用终端来按照开发人员教程中显示的方式导航网站 - 理论上。 但是,我不知道javascript,因此很难正确使用模块。

所以这里是我喜欢的来源: 摩根士丹利

对于“公司 - 截至10/14/2011”之下的几家上市公司,我喜欢保存各自的页面。 例如,点击第一个上市公司(即'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. 最后,如果你说前两个问题可以用yes表示,那么如果你可以帮我解决实际的编码问题会非常好。 例如,在上面的代码中,缺少的基本部分是'save'-command (也许使用Firefox的saveDocument函数?)

Web通过HTTP请求和响应工作。

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

如果目标站点使用JS来形成请求,那么您可以执行JS,也可以分析它的功能,以便您可以使用所使用的语言执行相同操作。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM