![](/img/trans.png)
[英]How I can get the plain-text source of a web page that I've generated dynamically?
[英]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®s=NABU ,我試圖得到的信息是關於ConsumerOPR的行
您需要對Javascript正在執行的操作進行反向工程。 是否觸發了填充<div>
的AJAX請求? 如果是這樣,使用Firebug嗅探請求應該很容易,然后使用LWP :: UserAgent或WWW :: Mechanize復制它以獲取信息。
如果Javascript只是在進行純DOM操作,那么這意味着數據必須存在於頁面中的其他位置或Javascript中。 因此,弄清楚它來自何處並抓住它。
最后,如果這些選項都不合適,您可能需要使用真正的瀏覽器來完成它。 有一些選項可以自動執行瀏覽器行為,例如WWW :: Mechanize :: Firefox或Win32 :: IE :: Mechanize 。
John Resig 將瀏覽器引入服務器可能很有用。
由於某些Javascript會生成您網頁的內容,因此您需要能夠:
一個解決方案可能是真正啟動瀏覽器導航到該頁面,然后解析由它加載的頁面,以提取信息?
我從來沒有用它來抓取,但是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®=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.