用Python寫爬蟲,用什麼方式、架構比較好?

來源:互聯網
上載者:User
以前唯寫過很簡單的Python爬蟲,直接用內建庫實現,有沒有誰用Python爬過規模較大的資料,用的是什麼方法?
還有,採用現有的Python爬蟲架構,相比與直接使用內建庫,優勢在哪?因為Python本身寫爬蟲已經很簡單了。

回複內容:

可以看看 Scrapy ( http://scrapy.org/ ),基於這個架構來寫自己的爬蟲由於項目需求收集並使用過一些爬蟲相關庫,做過一些對比分析。以下是我接觸過的一些庫:
  • Beautiful Soup。名氣大,整合了一些常用爬蟲需求。缺點:不能載入JS。
  • Scrapy。看起來很強大的爬蟲架構,可以滿足簡單的頁面爬取(比如可以明確獲知url pattern的情況)。用這個架構可以輕鬆爬下來如亞馬遜商品資訊之類的資料。但是對於稍微複雜一點的頁面,如weibo的頁面資訊,這個架構就滿足不了需求了。
  • mechanize。優點:可以載入JS。缺點:文檔嚴重缺失。不過通過官方的example以及人肉嘗試的方法,還是勉強能用的。
  • selenium。這是一個呼叫瀏覽器的driver,通過這個庫你可以直接呼叫瀏覽器完成某些操作,比如輸入驗證碼。
  • cola。一個分布式爬蟲架構。項目整體設計有點糟,模組間耦合度較高,不過值得借鑒。

以下是我的一些實踐經驗:

  • 對於簡單的需求,比如有固定pattern的資訊,怎麼搞都是可以的。
  • 對於較為複雜的需求,比如爬取動態網頁面、涉及狀態轉換、涉及反爬蟲機制、涉及高並發,這種情況下是很難找到一個契合需求的庫的,很多東西只能自己寫。

至於題主提到的:

還有,採用現有的Python爬蟲架構,相比與直接使用內建庫,優勢在哪?因為Python本身寫爬蟲已經很簡單了。

third party library可以做到built-in library做不到或者做起來很困難的事情,僅此而已。還有就是,爬蟲簡不簡單,完全取決於需求,跟Python是沒什麼關係的。要處理 js 運行後的結果,可以使用 html5lib。
但我覺得最好的是用 beautifulsoup4 的介面,讓它內部用 html5lib。自己寫爬蟲的話,用一些非同步事件驅動庫,如gevent,比單純多線程要好很多。大二的時候寫了一個網路爬蟲 爬取 http://amazon.com 的某類商品的bestseller top100 的所有評論。

也不用什麼架構,在linux下用的叫做 beautifulsoup的庫協助解析html,Regex也可以啦 不過好麻煩。

爬蟲好慢啦,有個小技巧是走代理,因為是外國網站嘛,非常慢,而且可以防止同一個ip訪問次數太多。

大概有幾萬個網頁吧,然後用beautifsoup解析,挑一些自己感興趣的資料,比如打分、評論、商家、分類什麼的。然後用一些科學庫做一些簡單的統計和報表,比如 numpy、scipy、matplotlib等。網上也有好多資料產生報表的 js 庫,很酷炫,也很不錯的 :)

恩,就是這樣。我也來回答一下吧.

如果樓主想爬去更大規模的東西,可以有兩種方案,一種自己寫一個爬蟲架構,另一總通過爬蟲架構.
1,自己動手寫一個爬蟲架構,我沒寫過沒法說
2,通過線程的爬蟲框架構.
用的比較多的是scrapy,首先scrapy非同步,然後scrapy可以寫成分布式爬蟲.這樣面對大資料再也不用爬一輩子啦.
另外還有pyspider,sola等.更多的爬蟲我也在收集中,不過如果你要著手開始用架構的話,大概只能找到這兩個,究其原因,還是因為很多架構是是英語寫的吧,大部分不願意爬英語的坑.

還有有人提到cola,這個是國人寫的,作者這樣說過
靠,以前只是聽過scrapy,從來沒去看過,剛看了一下,發現除了分布式的部分,竟然真挺像的。
從scrapy倒是有啟發可以儲存json檔案的形式,減少對資料庫的依賴。

想了一下,分布式還是我的初衷,真沒想到其他部分這麼相近。
其實用那個架構到不是一件值得糾結的事,因為幾乎沒得選.

第二個問題.python自己的類庫和架構有什麼區別?
你問這樣的問題,是因為,你現在爬的需求還很簡單!!
僅僅是爬靜態頁的話,而且爬不了多少個,真心建議你喜歡什麼就用什麼好了,或者直接就用類庫吧,推薦requests,幾行代碼就搞定了

但是,生活中不光有靜態頁這種東西啊,還有ajax,還有js,還有各種各樣莫名其妙的細節.

而細節是相當可怕的存在,比如,資料的提取,用正則還是xpath,為什麼不是所有的頁面都有下一頁,一晚上爬了5000條資料,我一共有20萬條怎麼辦,爬蟲又被封了,我靠.

有時候想想自己真夠堅定不移的.也真是煩

這個時候,你就會知道架構的好處了,架構最大的作用,在於用最簡單的方法協助你實現需求,也就是說, 如果你現在可以很好的滿足工作的需要,那就不要看架構,如果工作有些吃力,那就去看看吧,說不定別人已經造好了輪子,等著你推車呢!老漢!

cola的連結給你吧
Cola:一個分布式爬蟲架構
scrapy百度就是
pyspider還沒用這個要看個人了,開始可以先看scrapy方面的內容,然後結合redis,實現分布式,具體實現可以參考github上的代碼,如chineking/cola · GitHub
儲存的話,需要mongodb,要深入的話,這方面的內容還是挺多,而且mongodb可以實現叢集式儲存,完全可以滿足樓主的要求。
架構有很多,比如爬蟲架構 | 為自己寫代碼 ,樓主可以嘗試下。
爬取大規模的資料其實可以通過分布式來實現。我的部落格裡有很詳細的敘述和源碼,python3.4實現。
歡迎交流 網路資源搜尋爬蟲(python 3.4.1實現) 寫了一個小爬蟲爬學校學生的照片成績,爬了三四天。好幾次都是卡死我開發了一個雲端爬蟲開發架構:神箭手,可以讓開發人員在雲上使用Javascript編寫和運行爬蟲,歡迎大家來使用拍磚~
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.