2011-10-14 141 views
4

我想通過使用網絡爬蟲保存幾個網頁。通常我更喜歡用perl的WWW::Mechanize modul來做。然而,據我所知,我試圖抓取的網站上有很多javascript,似乎很難避免。因此,我看着下面的Perl模塊網絡爬蟲:使用Perl的MozRepl模塊處理Javascript

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。 (也許使用火狐的saveDocument函數?)

回答

1

網絡通過HTTP請求和響應工作。

如果你能發現正確的請求發送,那麼你將得到正確的迴應。

如果目標站點使用JS來形成請求,那麼您可以執行JS, 或分析它的作用,以便您可以使用您正在使用的語言執行相同操作。

一個更簡單的方法是使用一個工具來捕獲您的請求,無論請求是否由JS創建,然後您可以製作您的刮碼 來創建您想要的請求。

AT & T的「網頁刮取代理」就是這樣的工具。

您設置它,然後正常瀏覽網站以進入您想要抓取的頁面, ,WSP將爲您記錄所有請求和響應。

它以Perl代碼的形式記錄它們,然後可以根據需要進行修改。

+0

我不知道AT&T的WSP工具。這真是一個方便的腳本。謝謝,我用它並且實際上解決了我的問題。謝謝tadmc! – mropa