😃
Scrapy設定(settings)提供了定製Scrapy組件的方法。
你可以控制包括核心(core),插件(extension),pipeline及spider組件。
設定爲代碼提供了提取以key-value映射的配置值的的全局命名空間(namespace)。
主要記錄一下常用的幾個內置的配置文件,以便以後好查詢。標記重要的,那一定很重要
-
ROBOTSTXT_OBEY = True (重要)
是否遵守機器人協議,默認是True,開始爬蟲的時候,記得改成 False
-
CONCURRENT_ITEMS
Item Processor(即 Item Pipeline) 同時處理(每個response的)item的最大值。默認是 100,剛創建的項目中,settings文件是沒有的。
如需使用,在settings文件中加上即可
-
CONCURRENT_REQUESTS
Scrapy downloader 併發請求(concurrent requests)的最大值。默認是 16
-
CONCURRENT_REQUESTS_PER_DOMAIN
對單個網站進行併發請求的最大值。 默認值是 16
-
CONCURRENT_REQUESTS_PER_IP
能夠被單個IP處理的併發請求數,默認值0,代表無限制,需要注意,如果不爲零,那CONCURRENT_REQUESTS_PER_DOMAIN將被忽略,即併發數的限制是按照每個IP來計算,而不是每個域名
-
DOWNLOAD_DELAY (重要)
如果沒有開啓智能限速,這個值就代表一個規定死的值,代表對同一網址延遲請求的秒數。一般是防止IP被封的有效手段之一。對了,默認值是 0
-
DOWNLOAD_TIMEOUT (重要)
下載器超時時間(單位: 秒)。默認值180秒,時間也太特麼的長了,當時使用IP代理池,忘記重設超時時間,導致爬取效率極低。所以,一定要記得設置超時時間,一般設置5到10秒。
-
COOKIES_ENABLED (重要)
是否支持cookie,cookiejar進行操作cookie,默認開啓,對於某些網站,需要開啓cookie才能爬取,有些需要關閉。需要具體分析。
-
DEFAULT_REQUEST_HEADERS
Scrapy HTTP Request使用的默認header。由 DefaultHeadersMiddleware 產生。可以用來修改UA,不過我很少在這裏修改。
-
USER_AGENT(重要)
客戶端User-Agent請求頭,一定要記得改,默認的請求頭是個什麼玩意。
-
兩個中間件,一個是 DOWNLOADER_MIDDLEWARES,另一個是 SPIDER_MIDDLEWARES
關於DOWNLOADER_MIDDLEWARES 的用法可以參考我的另一篇博客 點這
爲什麼我只說了下載器中間件?因爲我TMD至今還沒使用過爬蟲中間件
你可以在這裏添加你自己定義的中間件,也可以禁用scrapy內置的中間件。
-
ITEM_PIPELINES (重要)
保存項目中啓用的pipeline及其順序的字典。該字典默認爲空,值(value)任意。 不過值(value)習慣設定在0-1000範圍內。自己寫的PIPELINE一定要記得添加進去噢
-
關於日誌的常用配置
- LOG_ENABLED 也就是要不要開啓日誌的意思, 默認是True
- LOG_ENCODING 日誌的編碼,默認是 utf-8
- LOG_FILE 日誌的文件,默認是None,也就是輸出到控制檯
- LOG_LEVEL 日誌的級別。默認是 DEBUG,可選的級別有: CRITICAL、 ERROR、WARNING、INFO、DEBUG。DEBUG爲最低級別,日誌輸出DEBUG及以上級別的信息
-
REDIRECT_ENABLED 與 REDIRECT_MAX_TIMES (重要)
是否啓用Redirect中間件,及其單個請求將遵循的最大重定向數。默認是啓動中間件,單個請求最大的重定向數,默認爲20
-
HTTPERROR_ALLOWED_CODES
允許處理的狀態碼,一般用來處理301 302這類的狀態碼
-
當然,你也可以在settings中任意寫入各種配置,如數據庫的。看自己的需求
以下,針對分佈式爬蟲 scrapy-redis的配置
1. 確保request存儲到redis中
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
2. 確保所有爬蟲共享相同的去重指紋
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
3. 在redis中保持 scrapy-redis用到的隊列,不會清理redis中的隊列,從而可以實現暫停和恢復的功能
SCHEDULER_PERSIST = True
4. 設置 連接redis信息
REDIS_HOST = ‘192.168.43.115’
REDIS_PORT = 6379
REDIS_PARAMS = {‘password’: ‘xxx’}
未完待續…