簡體   English   中英

如何使用Perl從使用JavaScript動態生成的網頁中獲取文本?

[英]How can I use Perl to grab text from a web page that is dynamically generated with JavaScript?

有一個網站我試圖從Perl中提取信息,但是我需要的頁面部分是使用javascript生成的,所以你在源代碼中看到的是:

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

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

document.getElementById('results').innerHTML;

我不確定這是否可能,或者是否有人有任何想法或方法來做到這一點。 我正在使用lynx源轉儲到其他頁面,但由於我不能直接屏幕刮這個頁面我來這里詢問它!

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

您需要對Javascript正在執行的操作進行反向工程。 是否觸發了填充<div>的AJAX請求? 如果是這樣,使用Firebug嗅探請求應該很容易,然后使用LWP :: UserAgentWWW :: Mechanize復制它以獲取信息。

如果Javascript只是在進行純DOM操作,那么這意味着數據必須存在於頁面中的其他位置或Javascript中。 因此,弄清楚它來自何處並抓住它。

最后,如果這些選項都不合適,您可能需要使用真正的瀏覽器來完成它。 有一些選項可以自動執行瀏覽器行為,例如WWW :: Mechanize :: FirefoxWin32 :: IE :: Mechanize

由於某些Javascript會生成您網頁的內容,因此您需要能夠:

  • 執行一些Javascript代碼
    • 甚至,可能是一些復雜的JS代碼,執行Ajax請求以及所有這些?
  • 並使用支持瀏覽器中存在的函數/方法的引擎(如DOM操作)來實現


一個解決方案可能是真正啟動瀏覽器導航到該頁面,然后解析由它加載的頁面,以提取信息?

我從來沒有用它來抓取,但是Selenium套件可能有所幫助,在這里:使用Selenium RC,你可以啟動一個真正的瀏覽器,並試用它 - 然后,你有功能從它獲取數據。

它不是很快,而且非常繁重(它必須啟動一個瀏覽器!) ,但它運行得很好:例如,你將使用Firefox導航到你的頁面 - 這意味着一個真正的Javascript引擎,這是每天都被很多人使用;-)

這可能是你想要的(在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等效項???

和/或自己解析。

僅供參考:我所做的只是使用firebug檢查請求並使用PHP / CURL重新創建它...

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM