2010-04-16 36 views
10

有一個網站,我想從Perl中提取信息,我需要的是使用JavaScript生成的頁面,不過部分,因此你在源看到的是:如何使用Perl從JavaScript動態生成的網頁中獲取文本?

<div id="results"></div> 

我需要以某種方式拉取出該div的內容並使用Perl/proxies/whatever將其保存到文件中。例如我想要保存的信息將是

document.getElementById('results').innerHTML; 

我不確定這是否可能,或者如果有人有任何想法或方法來做到這一點。 我正在使用山貓源轉儲爲其他網頁,但因爲我不能直接屏幕刮這個頁面,我來到這裏問它!

如果有人有興趣,該頁面是http://downloadcenter.trendmicro.com/index.php?clk=left_nav&clkval=pattern_file&regs=NABU,我想獲得的信息是關於ConsumerOPR

+0

我也對這個感興趣...你能看到和/或你有沒有訪問AJAX請求URL(假設數據正在通過AJAX填充)? – farinspace 2010-04-16 17:43:36

+0

是的,我可以看到ajax,但是在這個網站上從ajax查詢中發回的所有內容都是results.innerHTML設置的另一個js函數。 – user318747 2010-04-16 17:45:51

回答

11

您需要對Javascript正在做的事情進行反向工程。它是否觸發了一個AJAX請求來填充<div>?如果是這樣,使用Firebug來嗅探請求,然後用LWP::UserAgentWWW::Mechanize複製它以獲取信息應該相當容易。

如果Javascript只是在進行純粹的DOM操作,那麼這意味着數據必須已經存在於頁面或Javascript中的其他地方。所以找出它來自哪裏並抓住它。

最後,如果這些選項都不足夠,您可能需要使用真正的瀏覽器來完成。瀏覽器行爲自動化有幾個選項,如WWW::Mechanize::FirefoxWin32::IE::Mechanize

7

Bringing the Browser to the Server行通過John Resig可能是有用的。

+0

非常有趣的鏈接。多年來,我不得不用這種方式。我實際上有點失望,現在它會輕鬆幾個數量級。 – 2010-04-16 17:49:02

+0

大聲笑...隨着網站增加動態組件,我歡迎易用性......我記得爲了類似的目的而運行瀏覽器必須設置專用服務器。 – farinspace 2010-04-16 17:56:13

+0

單個專用服務器?如何同時運行64個IE實例的四個專用四CPU系統? ;-) – 2010-04-16 18:08:18

4

,您的網頁內容是由一些JavaScript生成的,你需要的能力:

  • 執行一些JavaScript代碼
    • 可能,甚至一些複雜的JS代碼,做Ajax請求,並所有這一切?
  • 有了這樣的支持功能/存在於瀏覽器(如DOM操作)


一個解決辦法是居然真的啓動瀏覽器的方法引擎做導航到該頁面,然後解析由它加載的頁面以提取信息?

我從來沒有使用過這個來抓取,但Selenium suite可能會有所幫助,在這裏:使用Selenium RC,您可以啓動一個真正的瀏覽器並試用它 - 然後,您可以從中獲取數據。

這不是很快,它很沉重(它必須啓動瀏覽器!),但它工作得很好:例如,您將使用Firefox導航到您的頁面 - 這意味着一個真正的Javascript引擎,許多人每天都會使用它;-)

0

This可能是你尋找什麼(在PHP):

$url = 'http://downloadcenter.trendmicro.com/ajx/pattern_result.php'; 

$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt ($ch, CURLOPT_URL, $url); 
curl_setopt ($ch, CURLOPT_POST, 1); 
curl_setopt ($ch, CURLOPT_POSTFIELDS, 'q=patresult_page&reg=NABU'); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
$content = curl_exec($ch); 
curl_close($ch); 

echo $content; 
exit; 

一旦你,你可以使用類似的內容:http://code.google.com/p/phpquery/解析你所需要的結果或類似的Perl相當於???

和/或自己解析。

FYI:我所做的就是使用Firebug檢查的要求,並與PHP /捲曲重建它...

0

與動態創建的HTML,您可以使用Firefox的插件Chickenfoot工作。 或者,如果您需要從命令行腳本使用綁定到Perl的東西。我以前用Python做過這個。

相關問題