Python的Scrapy定製網路爬蟲

jieforest發表於2013-01-20
網路爬蟲(Web Crawler, Spider)就是一個在網路上亂爬的機器人。當然它通常並不是一個實體的機器人,因為網路本身也是虛擬的東西,所以這個“機器人”其實也就是一段程式,並且它也不是亂爬,而是有一定目的的,並且在爬行的時候會蒐集一些資訊。

例如 Google 就有一大堆爬蟲會在 Internet 上搜集網頁內容以及它們之間的連結等資訊;又比如一些別有用心的爬蟲會在 Internet 上搜集諸如 foo@bar.com 或者 foo [at] bar [dot] com 之類的東西。除此之外,還有一些定製的爬蟲,專門針對某一個網站,還有諸如小眾軟體或者 LinuxToy 這樣的網站也經常被整個站點 crawl 下來,換個名字掛出來。

其實爬蟲從基本原理上來講很簡單,只要能訪問網路和分析 Web 頁面即可,現在大部分語言都有方便的 Http 客戶端庫可以抓取 Web 頁面,而 HTML 的分析最簡單的可以直接用正規表示式來做,因此要做一個最簡陋的網路爬蟲實際上是一件很簡單的事情。不過要實現一個高質量的 spider 卻是非常難的。

爬蟲的兩部分:

一是下載 Web 頁面,有許多問題需要考慮,如何最大程度地利用本地頻寬,如何排程針對不同站點的 Web 請求以減輕對方伺服器的負擔等。

一個高效能的 Web Crawler 系統裡,DNS 查詢也會成為急需優化的瓶頸。

另外,還有一些“行規”需要遵循(例如 robots.txt)。而獲取了網頁之後的分析過程也是非常複雜的,Internet 上的東西千奇百怪,各種錯誤百出的 HTML 頁面都有,要想全部分析清楚幾乎是不可能的事;
另外,隨著 AJAX 的流行,如何獲取由 Javascript. 動態生成的內容成了一大難題;

除此之外,Internet 上還有有各種有意或無意出現的Spider Trap ,如果盲目的跟蹤超連結的話,就會陷入 Trap 中萬劫不復了,例如這個網站,據說是之前 Google 宣稱 Internet 上的 Unique URL 數目已經達到了 1 trillion 個,因此這個人 is proud to announce the second trillion 。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/301743/viewspace-752949/,如需轉載,請註明出處,否則將追究法律責任。

相關文章