2010-02-19 80 views
4

我目前在C#中使用HTML Agility Pack作爲網絡爬蟲。到目前爲止,我設法避免了很多問題(無效的URI,例如「/extra/url/to/base.html」和「#」鏈接),但我也需要處理PHP,Javascript等。站點,鏈接都在PHP中,當我的網絡爬蟲嘗試導航到這些網站時,它會失敗。一個例子是PHP/Javascript手風琴鏈接頁面。我將如何去導航/解析這些鏈接?Web爬蟲解析PHP/Javascript鏈接?

+0

如果您要抓取網站,您如何看到實際的PHP代碼?通常情況下,PHP是由Web服務器執行以生成HTML,因此您根本無法看到PHP源代碼,只能看到它的執行效果。或者我不明白「PHP ... accordion link page」是什麼意思;你能給個例子嗎? – 2010-02-23 08:10:37

回答

6

讓我們看看我是否正確理解你的問題。我知道這個答案可能不足,但如果你需要更具體的答案,我需要更多的細節。


你想編寫一個網絡爬蟲,但它無法抓取與.PHP結尾的網址?

如果是這種情況,你需要退後一步,思考爲什麼。這可能是因爲抓取程序使用基於URI方案的正則表達式來選擇要抓取哪些URL。

在大多數情況下,這些URL只是普通的HTML,但它們也可能是一個生成的圖像(如驗證碼)或700mb iso文件的下載鏈接 - 並且沒有辦法確定沒有檢出標題來自該URL的HTTP響應。

注意:如果您要從頭開始編寫自己的抓取工具,您需要對HTTP有很好的理解。

抓取工具在獲取URL時首先要看到的是包含MIME content-type的標頭 - 它告訴瀏覽器/抓取工具如何處理和打開數據(HTML,普通文本,.exe,等等)。您可能需要基於MIME類型而不是URL方案下載頁面。 HTML的MIME類型爲text/html,您應該在下載URL的其餘內容之前使用您正在使用的HTTP庫檢查該內容。


JavaScript的問題

同上除了在爬行器中運行的JavaScript /分析器是簡單的項目非常罕見,比它解決可能會造成更多的問題。爲什麼你需要Javascript?


一個不同的解決
如果你願意學習Python(或已經知道了),我建議你看看Scrapy。這是一個類似於Django web framework的網頁抓取框架。使用起來非常簡單,許多問題已經得到解決,因此如果您想了解有關該技術的更多信息,這可能是一個很好的起點。

+0

謝謝!正是我需要的。有時候我甚至不知道要問什麼問題! – cam 2010-02-24 13:51:26

+0

很高興能幫到你! – hannson 2010-02-25 12:31:27