scrapy預設對特定爬取進行優化。這些站點一般被乙個單獨的scrapy spider進行處理, 不過這並不是必須或要求的(例如,也有通用的爬蟲能處理任何給定的站點)。
除了這種爬取完某個站點或沒有更多請求就停止的」專注的爬蟲」,還有一種通用的爬取型別,其能爬取大量(甚至是無限)的**, 僅僅受限於時間或其他的限制。 這種爬蟲叫做」通用爬蟲(broad crawls)」,一般用於搜尋引擎。
通用爬蟲一般有以下通用特性:
正如上面所述,scrapy預設設定是對特定爬蟲做了優化,而不是通用爬蟲。不過, 鑑於其使用了非同步架構,scrapy對通用爬蟲也十分適用。 本篇文章總結了一些將scrapy作為通用爬蟲所需要的技巧, 以及相應針對通用爬蟲的scrapy設定的一些建議。
併發是指同時處理的request的數量。其有全域性限制和區域性(每個**)的限制。
scrapy預設的全域性併發限制對同時爬取大量**的情況並不適用,因此您需要增加這個值。 增加多少取決於您的爬蟲能占用多少cpu。 一般開始可以設定為100
。不過最好的方式是做一些測試,獲得scrapy程序占取cpu與併發數的關係。 為了優化效能,您應該選擇乙個能使cpu佔用率在80%-90%的併發數。
增加全域性併發數:
concurrent_requests=100
當進行通用爬取時,一般您所注意的僅僅是爬取的速率以及遇到的錯誤。 scrapy使用info
log級別來報告這些資訊。為了減少cpu使用率(及記錄log儲存的要求), 在生產環境中進行通用爬取時您不應該使用debug
log級別。 不過在開發的時候使用debug
應該還能接受。
設定log級別:
log_level='info'
除非您 真的 需要,否則請禁止cookies。在進行通用爬取時cookies並不需要, (搜尋引擎則忽略cookies)。禁止cookies能減少cpu使用率及scrapy爬蟲在記憶體中記錄的蹤跡,提高效能。
禁止cookies:
cookies_enabled=false
對失敗的http請求進行重試會減慢爬取的效率,尤其是當站點響應很慢(甚至失敗)時, 訪問這樣的站點會造成超時並重試多次。這是不必要的,同時也占用了爬蟲爬取其他站點的能力。
禁止重試:
retry_enabled=false
download_timeout=15
除非您對跟進重定向感興趣,否則請考慮關閉重定向。 當進行通用爬取時,一般的做法是儲存重定向的位址,並在之後的爬取進行解析。 這保證了每批爬取的request數目在一定的數量, 否則重定向迴圈可能會導致爬蟲在某個站點耗費過多資源。
關閉重定向:
redirect_enabled=false
有些站點(基於2023年的經驗資料,之多有1%)宣告其為 ajax crawlable 。 這意味著該**提供了原本只有ajax獲取到的資料的純html版本。 **通過兩種方法宣告:
在url中使用#!
- 這是預設的方式;
使用特殊的meta標籤 - 這在」main」, 「index」 頁面中使用。
scrapy自動解決(1);解決(2)您需要啟用 ajaxcrawlmiddleware:
ajaxcrawl_enabled=true
通用爬取經常抓取大量的 「index」 頁面; ajaxcrawlmiddleware能幫助您正確地爬取。 由於有些效能問題,且對於特定爬蟲沒有什麼意義,該中間預設關閉。
通用爬蟲和聚焦爬蟲
通用爬蟲是搜尋引擎抓取系統 baidu,goole,yahoo等 的重要組成部分 搜尋引擎網路爬蟲的基本工作流程如下 第一步 抓取網頁 1,首先選取一部分的種子url,並將這些url放進抓取url佇列 3,分析已抓取url佇列中url,分析其中的其他url,並將url放入待抓取1url佇列 從而進入...
通用爬蟲和聚焦爬蟲
根據使用場景,網路爬蟲可分為 通用爬蟲 和 聚焦爬蟲 兩種。一 通用爬蟲 二 通用搜尋引擎 search engine 工作原理 通用網路爬蟲 從網際網路中蒐集網頁,採集資訊,這些網頁資訊用於為搜尋引擎建立索 引從而提供支援,它決定著整個引擎系統的內容是否豐富,資訊是否即時,因此其效能的優劣直接影響...
Scrapy通用爬蟲
通用爬蟲 主要時通過繼承 crawlspider,定義一些爬去的規則來實現頁面的提取 crawlspider rules parse start url 定義rule時的引數 class scrapy.contrib.spiders.rule link extractor,callback none...