併發是指同時處理的request的數量。其有全侷限制和局部(每一個網站)的限制。
Scrapy默認的全局併發限制對同時爬取大量網站的狀況並不適用,所以您須要增長這個值。 增長多少取決於您的爬蟲能佔用多少CPU。 通常開始能夠設置爲 100 。不過最好的方式是作一些測試,得到Scrapy進程佔取CPU與併發數的關係。 爲了優化性能,您應該選擇一個能使CPU佔用率在80%-90%的併發數
在setting.py
文件中寫上CONCURRENT_REQUESTS = 100
,scrapy中默認的併發數是32html
當進行通用爬取時,通常您所注意的僅僅是爬取的速率以及遇到的錯誤。 Scrapy使用 INFO log級別來報告這些信息。爲了減小CPU使用率(及記錄log存儲的要求), 在生產環境中進行通用爬取時您不該該使用 DEBUG log級別。 不過在開發的時候使用 DEBUG 應該還能接受。
setting.py
文件中設置LOG_LEVEL = 'INFO'
python
除非您 真的 須要,不然請禁止cookies。在進行通用爬取時cookies並不須要, (搜索引擎則忽略cookies)。禁止cookies能減小CPU使用率及Scrapy爬蟲在內存中記錄的蹤影,提升性能。
COOKIES_ENABLED = False
git
對失敗的HTTP請求進行重試會減慢爬取的效率,尤爲是當站點響應很慢(甚至失敗)時, 訪問這樣的站點會形成超時並重試屢次。這是沒必要要的,同時也佔用了爬蟲爬取其餘站點的能力。github
RETRY_ENABLED = False
shell
若是您對一個很是慢的鏈接進行爬取(通常對通用爬蟲來講並不重要), 減少下載超時能讓卡住的鏈接能被快速的放棄並解放處理其餘站點的能力。cookie
DOWNLOAD_TIMEOUT = 15
,其中15是設置的下載超時時間併發
除非您對跟進重定向感興趣,不然請考慮關閉重定向。 當進行通用爬取時,通常的作法是保存重定向的地址,並在以後的爬取進行解析。 這保證了每批爬取的request數目在必定的數量, 不然重定向循環可能會致使爬蟲在某個站點耗費過多資源。app
REDIRECT_ENABLED = False
scrapy
詳細使用方法請看設置請求池編輯器
由於本人是學生黨,所以暫時找到不到比較好的代理,因此這裏只是寫了一個通常的設置代理池的方法,不過在之後會寫一個更好的代理池,用數據實現,詳情請看代理ip設置方法
DOWMLOAD_DELY=3
,設置延遲下載能夠避免被發現
scrapy shell url 查看網頁,不過這種方式可能對於要請求頭的網頁不行,對於通常的網頁仍是能夠的
scrapy view shell 用來查看動態加載的網頁,若是查看的網頁用了動態加載,那麼用這個命令行打開的網頁就是不完整的,確定缺乏了什麼
在頁面的任意位置添加以下代碼
from scrapy.shell import inspect_response def paser(self,response): inspect_response(response,self) #當程序運行到這裏就會跳出終端,而且在終端出現調試命令,固然這個能夠隨便寫在哪裏
初學者最頭疼的事情就是沒有處理好異常,當爬蟲爬到一半的時候忽然由於錯誤而中斷了,可是這時又不能從中斷的地方開始繼續爬,頓時感受內心日了狗,可是這裏有一個方法能夠暫時的存儲你爬的狀態,當爬蟲中斷的時候繼續打開後依然能夠從中斷的地方爬,不過雖然說持久化能夠有效的處理,可是要注意的是當使用cookie臨時的模擬登陸狀態的時候要注意cookie的有效期
只須要在
setting.py
中JOB_DIR=file_name
其中填的是你的文件目錄,注意這裏的目錄不容許共享,只能存儲單獨的一個spdire的運行狀態,若是你不想在從中斷的地方開始運行,只須要將這個文件夾刪除便可固然還有其餘的放法:
scrapy crawl somespider -s JOBDIR=crawls/somespider-1
,這個是在終端啓動爬蟲的時候調用的,能夠經過ctr+c
中斷,恢復仍是輸入上面的命令
ROBOTSTXT_OBEY = False
只須要在settings中取消相應的設置便可
DEFAULT_REQUEST_HEADERS={{ 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'en', 'User-Agent':'......' #在此處設置 }}