簡體   English   中英

Perl的WWW :: Mechanize如何擴展使用JavaScript添加到自己的HTML頁面?

[英]How can Perl's WWW::Mechanize expand HTML pages that add to themselves with JavaScript?

如上一個問題所述,我正在為QuakeLive網站編寫爬蟲。
我一直在使用WWW :: Mechanize來獲取Web內容,這對於除匹配項之外的所有頁面均適用。 問題是我需要獲取所有這些ID:

<div id="ffa_c14065c8-d433-11df-a920-001a6433f796_50498929" class="areaMapC">

這些用於構建特定的匹配URL,但我做不到。

我設法僅通過FireBug看到了這些ID,而我嘗試過的頁面下載器,解析器和getter都無法提供幫助。 我所能得到的是該頁面的一個簡單版本,該代碼是通過在Firefox中“顯示源代碼”可以看到的代碼。

由於FireBug顯示了這些ID,因此我可以放心地假設它們已經加載了,但是我不明白為什么沒有其他東西可以得到它們。 它可能與JavaScript有關。

您可以在此處找到頁面示例

要獲取包含這些ID的DOM,您可能必須在該站點上執行javascript代碼。 我不知道有任何庫允許您執行此操作,然后在perl中內省生成的DOM,因此僅控制一個實際的瀏覽器,然后再向其詢問DOM或僅請求其中的一部分,似乎是一個不錯的選擇解決方法。

各種瀏覽器提供了以編程方式進行控制的方法。 使用基於Mozilla的瀏覽器(例如Firefox),就像將mozrepl加載到瀏覽器中,從perl空間打開套接字,發送幾行javascript代碼以實際加載該頁面,然后再添加一些javascript代碼一樣簡單向您提供您感興趣的DOM部分。 然后,您可以使用CPAN上的許多JSON模塊之一解析結果。

另外,您可以瀏覽頁面上執行的javascript代碼並弄清楚它的實際作用,然后在您的搜尋器中模仿它。

問題是機械化模仿了瀏覽器的網絡層,而不是渲染或javascript執行層。

許多人使用Microsoft提供的Web瀏覽器控件。 這是控件中IE的完整實例,您可以在WinForm,WPF或普通的舊版控制台應用程序中托管該控件。 它除其他功能外,讓您加載網頁並運行javascript以及發送和接收javascript命令。

以下是有關如何托管瀏覽器控件的合理介紹: http : //www.switchonthecode.com/tutorials/csharp-snippet-tutorial-the-web-browser-control

通過ajax請求發送大量數據。 您需要以某種方式在抓取工具中說明這一點。

看來他們正在使用AJAX。 我可以看到使用FireBug發送請求的位置。 您可能需要嘗試解析並執行影響DOM的javasript來解決這個問題。

您應該能夠使用WWW :: HtmlUnit-它加載並執行javascript。

閱讀常見問題解答 WWW :: Mechanize不執行javascript。 他們可能正在使用JavaScript來更改頁面。 您將需要其他方法。

暫無
暫無

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

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