python 下载文件 限速-Python网络爬虫---scrapy通用爬虫及反爬技巧
一、通用爬蟲
通用爬蟲一般有以下通用特性:爬取大量(一般來說是無限)的網站而不是特定的一些網站。
不會將整個網站都爬取完畢,因為這十分不實際(或者說是不可能)完成的。相反,其會限制爬取的時間及數量。
在邏輯上十分簡單(相較于具有很多提取規則的復雜的spider),數據會在另外的階段進行后處理(post-processed)
并行爬取大量網站以避免被某個網站的限制所限制爬取的速度(為表示尊重,每個站點爬取速度很慢但同時爬取很多站點)。
Scrapy默認設置是對特定爬蟲做了優化,而不是通用爬蟲。不過, 鑒于scrapy使用了異步架構,其對通用爬蟲也十分適用。
總結了一些將Scrapy作為通用爬蟲所需要的技巧, 以及相應針對通用爬蟲的Scrapy設定的一些建議。
1.1 增加并發
并發是指同時處理的request的數量。其有全局限制和局部(每個網站)的限制。
Scrapy并發增加的程度取決于您的爬蟲能占用多少CPU。 一般開始可以設置為 100 。不過最好的方式是做一些測試,獲得Scrapy進程占取CPU與并發數的關系。 為了優化性能,您應該選擇一個能使CPU占用率在80%-90%的并發數。
增加全局并發數:CONCURRENT_REQUESTS = 100
1.2 降低log級別
當進行通用爬取時,一般您所注意的僅僅是爬取的速率以及遇到的錯誤。 Scrapy使用 INFO log級別來報告這些信息。為了減少CPU使用率(及記錄log存儲的要求), 在進行通用爬取時應該使用 INFO log級別。 不過在開發的時候使用 DEBUG 應該還能接受。
設置Log級別:LOG_LEVEL = "INFO"
1.3 禁止cookies
除非您 真的 需要,否則請禁止cookies。在進行通用爬取時cookies并不需要, (搜索引擎則忽略cookies)。禁止cookies能減少CPU使用率及Scrapy爬蟲在內存中記錄的蹤跡,提高性能。
禁止cookies:COOKIES_ENABLED = False
1.4 禁止重試
對失敗的HTTP請求進行重試會減慢爬取的效率,尤其是當站點響應很慢(甚至失敗)時, 訪問這樣的站點會造成超時并重試多次。這是不必要的,同時也占用了爬蟲爬取其他站點的能力。
禁止重試:RETRY_ENABLED = False
1.5 減小下載超時
如果您對一個非常慢的連接進行爬取(一般對通用爬蟲來說并不重要), 減小下載超時能讓卡住的連接能被快速的放棄并解放處理其他站點的能力。
減小下載超時:DOWNLOAD_TIMEOUT = 15
1.6 禁止重定向
除非您對跟進重定向感興趣,否則請考慮關閉重定向。 當進行通用爬取時,一般的做法是保存重定向的地址,并在之后的爬取進行解析。 這保證了每批爬取的request數目在一定的數量, 否則重定向循環可能會導致爬蟲在某個站點耗費過多資源。
關閉重定向:REDIRECT_ENABLED = False
scrapy反爬技巧
有些網站實現了特定的機制,以一定規則來避免被爬蟲爬取。 與這些規則打交道并不容易,需要技巧,有時候也需要些特別的基礎。 如果有疑問請考慮聯系 商業支持。
下面是些處理這些站點的建議(tips):使用user-agent池,輪流或隨機選擇來作為user-agent。
禁止cookies(參考 COOKIES_ENABLED),有些站點會使用cookies來發現爬蟲的軌跡。
設置下載延遲(2或更高)。參考 DOWNLOAD_DELAY 設置。
如果可行,使用 Google cache 來爬取數據,而不是直接訪問站點。
使用IP池。例如免費的 Tor項目 或付費服務(ProxyMesh)。
使用高度分布式的下載器(downloader)來繞過禁止(ban),您就只需要專注分析處理頁面。這樣的例子有: Crawlera
自動限速擴展
該擴展能根據Scrapy服務器及您爬取的網站的負載自動限制爬取速度。
設計目標更友好的對待網站,而不使用默認的下載延遲0。
自動調整scrapy來優化下載速度,使得用戶不用調節下載延遲及并發請求數來找到優化的值。 用戶只需指定允許的最大并發請求數,剩下的都交給擴展來完成。
擴展是如何實現的
在Scrapy中,下載延遲是通過計算建立TCP連接到接收到HTTP包頭(header)之間的時間來測量的。
注意,由于Scrapy可能在忙著處理spider的回調函數或者無法下載,因此在合作的多任務環境下準確測量這些延遲是十分苦難的。 不過,這些延遲仍然是對Scrapy(甚至是服務器)繁忙程度的合理測量,而這擴展就是以此為前提進行編寫的。
限速算法
算法根據以下規則調整下載延遲及并發數:
spider永遠以1個并發請求數及 AUTOTHROTTLESTARTDELAY 中指定的下載延遲啟動。 當接收到響應時,下載延遲會調整到該響應延遲與之前下載延遲之間的平均值。AutoThrottle擴展尊重標準Scrapy設置中的并發數及延遲。這意味著其永遠不會設置一個比 DOWNLOADDELAY 更低的下載延遲或者比CONCURRENTREQUESTSPERDOMAIN 更高的并發數 (或 CONCURRENTREQUESTSPER_IP ,取決于您使用哪一個)。
自動限速擴展參數
下面是控制AutoThrottle擴展的設置:AUTOTHROTTLE_ENABLED 默認False
AUTOTHROTTLE_START_DELAY 默認5.0
AUTOTHROTTLE_MAX_DELAY 默認60
AUTOTHROTTLE_DEBUG 默認False
CONCURRENT_REQUESTS_PER_DOMAIN
CONCURRENT_REQUESTS_PER_IP
DOWNLOAD_DELAY
總結
以上是生活随笔為你收集整理的python 下载文件 限速-Python网络爬虫---scrapy通用爬虫及反爬技巧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: word 公式编号 右侧对齐_word排
- 下一篇: linux安装tomcat_【零基础学云