Scrapy簡述
Scrapy十一個健壯的,用來從互聯網上抓取數據的web框架,Scrapy只需要一個配置文件就能組合各種組件和配置選項,並且Scrapy是基於事件(event-based)的架構,使得我們可以級聯多個操作,包括清理、組織、存儲數據到數據庫等等。假設現在你要抓取一個網站,這個網站的每一頁都有一百個條目,Scrapy可以毫不費勁地同時對這個網站發起16個請求,假如每個請求需要一秒鍾來完成,你就相當於每秒鍾爬取16個頁面,相當於每秒鍾生成了1600個條目,假如要把這些條目同時存儲到雲上,每一個條目的存儲需要3秒鍾(假設的),為了處理這16個請求,就需要運行1600 *3 = 4800個並發的寫入請求,對於一個傳統的多線程程序來說,就需要轉換成4800個線程,這會對系統造成極大的壓力。而對於Scrapy來說,只要你的硬件過關, 4800個並發請求是沒有問題的。
使用Scrapy的更多理由
Scrapy已經發展了5年有多,已經變得成熟和穩定,除了上面提到的性能優點外,Scrapy還有以下幾點優點:
- Scrapy可以處理不完整的HTML
你可以在Scrapy中使用Beautiful Soup或者lxml,但Scrapy已經提供了selectors(一個在lxml的基礎上提供了更高級的接口),可以高效地處理不完整的HTML代碼
- 活躍的Scrapy社區
Scrapy擁有一個活躍的社區,尤其是在Stack Overflow(https://stackoverflow.com/questions/tagged/Scrapy)上有上千個問題的討論,更多的社區論壇可以參考這里:http://Scrapy.org/community/
- 由社區維護的具有良好架構的代碼
Scrapy要求你用標准的方式去組織你的代碼,所以你在與他人合作時,別人不用苦苦研究你那擁有奇淫技巧的爬蟲
- 新特性越來越多且質量穩定
通過觀察Scrapy的新聞發布頁(http://doc.Scrapy.org/en/latest/news.html),就可以看到在增加的新特性和bug修正
忠告
在爬取信息的時候有兩個最重要的原則一定要堅守:
- 不要產生類似於DOS攻擊的行為
一個普通的網站瀏覽者會花上幾秒鍾去瀏覽一個網頁,但是一個爬蟲可以在一秒鍾內下載幾十個網頁,這會對網站和網站管理員造成壓力。通過使用節流閥來自動調整你的下載速率至普通用戶級別,如果你的爬取響應時間越來越長,就要減少你的爬取強度。而Scrapy都提供了以上功能
- 不要侵犯他人的版權
在你要爬取一個網站之前,最好先查看版權信息聲明,弄明白你被允許的行動范圍,大多數的網站都允許你下載他們的信息,前提是你不聲明對這些信息的版權。要注意的是,Scrapy會使用你的爬蟲名稱作為User-Agent,來讓網站管理員識別出這是一個由爬蟲發出的請求。Scrapy也提供一個名為RobotsTxtMiddleware的插件,這個插件可以自動遵守網站的robots.txt協議。
