簡體   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