降低log級別
當進行通用爬取時,一般您所注意的僅僅是爬取的速率以及遇到的錯誤。 Scrapy使用 INFO log級別來報告這些信息。爲了減少CPU使用率(及記錄log存儲的要求), 在生產環境中進行通用爬取時您不應該使用 DEBUG log級別。 不過在開發的時候使用 DEBUG 應該還能接受。
setting.py
文件中設置LOG_LEVEL = 'INFO'
禁止cookies
除非您 真的 需要,否則請禁止cookies。在進行通用爬取時cookies並不需要, (搜索引擎則忽略cookies)。禁止cookies能減少CPU使用率及Scrapy爬蟲在內存中記錄的蹤跡,提高性能。
COOKIES_ENABLED = False
禁止重試
對失敗的HTTP請求進行重試會減慢爬取的效率,尤其是當站點響應很慢(甚至失敗)時, 訪問這樣的站點會造成超時並重試多次。這是不必要的,同時也佔用了爬蟲爬取其他站點的能力。
RETRY_ENABLED = False
減少下載超時
如果您對一個非常慢的連接進行爬取(一般對通用爬蟲來說並不重要), 減小下載超時能讓卡住的連接能被快速的放棄並解放處理其他站點的能力。
DOWNLOAD_TIMEOUT = 15
,其中15是設置的下載超時時間
禁止重定向
除非您對跟進重定向感興趣,否則請考慮關閉重定向。 當進行通用爬取時,一般的做法是保存重定向的地址,並在之後的爬取進行解析。 這保證了每批爬取的request數目在一定的數量, 否則重定向循環可能會導致爬蟲在某個站點耗費過多資源。
REDIRECT_ENABLED = False
使用user_agent池
詳細使用方法請看設置請求池
使用ip代理池
因爲本人是學生黨,因此暫時找到不到比較好的代理,所以這裏只是寫了一個一般的設置代理池的方法,不過在以後會寫一個更好的代理池,用數據實現,詳情請看代理ip設置方法
設置延遲
DOWMLOAD_DELY=3
,設置延遲下載可以避免被發現
啓用調試工具
命令行調試
scrapy shell url 查看網頁,不過這種方式可能對於要請求頭的網頁不行,對於一般的網頁還是可以的
scrapy view shell 用來查看動態加載的網頁,如果查看的網頁用了動態加載,那麼用這個命令行打開的網頁就是不完整的,肯定缺少了什麼
編輯器中的調試
在頁面的任意位置添加如下代碼
from scrapy.shell import inspect_responsedef 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
中斷,恢復還是輸入上面的命令
不按照robots.txt
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':'......' #在此處設置}}