settings概述
我們?cè)谑褂胹crapy的時(shí)候,經(jīng)常需要設(shè)置或者修改一些參數(shù),而scrapy的參數(shù)共分為5個(gè)級(jí)別,具體如下:
- scrapy默認(rèn)參數(shù)
- 每個(gè)命令的默認(rèn)參數(shù)
- 項(xiàng)目settings模塊
- 單獨(dú)爬蟲(chóng)參數(shù)設(shè)置
- 命令行選項(xiàng)
優(yōu)先級(jí)從1-5逐漸上升,也就是4中設(shè)置的參數(shù),會(huì)覆蓋掉3中設(shè)置的參數(shù),原理就是python中字典dict的update。
3(項(xiàng)目settings模塊)就是我們最常使用的settings模塊,通常作為全局通用設(shè)置。
有時(shí)候我們一個(gè)項(xiàng)目會(huì)有多個(gè)spider,而每個(gè)spider需要設(shè)置的參數(shù)并不一樣,比如spider1需要使用pipeline1將數(shù)據(jù)存入到mysql中,而spider2使用pipeline2將數(shù)據(jù)存入redis中,因此我們要對(duì)兩個(gè)spider分開(kāi)進(jìn)行pipeline配置,可在spider中添加custom_settings字典,將參數(shù)寫(xiě)入其中即可,如下(命令行選項(xiàng)同理):
class MySpider(scrapy.Spider):
name = 'spider1'
custom_settings = {
'ITEM_PIPELINES': {'myproject.pipelines.pipeline1': 301},
}
class MySpider(scrapy.Spider):
name = 'spider2'
custom_settings = {
'ITEM_PIPELINES': {'myproject.pipelines.pipeline2': 301},
}
常用的settings參數(shù)
CONCURRENT_REQUESTS = 16 # 全局最大并發(fā)數(shù)
CONCURRENT_REQUESTS_PER_DOMAIN = 8 # 單個(gè)域名最大并發(fā)數(shù),如果下一個(gè)參數(shù)設(shè)置非0,此參數(shù)無(wú)效
CONCURRENT_REQUESTS_PER_IP = 0 # 單個(gè)ip最大并發(fā)數(shù)
COOKIES_ENABLED = True # 默認(rèn)啟用cookie,無(wú)需登錄時(shí)一般將其關(guān)閉
DEFAULT_REQUEST_HEADERS = { # 設(shè)置默認(rèn)請(qǐng)求頭
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en',
}
DOWNLOAD_DELAY = 0 # 下載延時(shí),高并發(fā)采集時(shí)設(shè)為0
DOWNLOAD_TIMEOUT = 180 # 超時(shí)時(shí)間設(shè)置,一般設(shè)置在10-30之間
LOG_ENABLED = True # 啟用日志
LOG_STDOUT = False # 將進(jìn)程所有的標(biāo)準(zhǔn)輸出(及錯(cuò)誤)重定向到log中,默認(rèn)False。如果開(kāi)啟,在項(xiàng)目中的print方法也會(huì)以log的形式輸出
LOG_LEVEL = 'DEBUG' # 日志輸出級(jí)別,上線后至少使用info級(jí)別
LOG_FILE = None # 將日志輸出到文件中
LOGSTATS_INTERVAL = 60.0 # 吞吐量輸出間隔,就是輸出每分鐘下載多少個(gè)頁(yè)面、捕獲多少個(gè)item的那個(gè),默認(rèn)每分鐘輸出一次,自主配置
REDIRECT_ENABLED = True # 默認(rèn)開(kāi)啟頁(yè)面跳轉(zhuǎn),一般選擇關(guān)閉
RETRY_ENABLED = True # 默認(rèn)開(kāi)啟失敗重試,一般關(guān)閉
RETRY_TIMES = 2 # 失敗后重試次數(shù),默認(rèn)兩次
RETRY_HTTP_CODES = [500, 502, 503, 504, 522, 524, 408] # 碰到這些驗(yàn)證碼,才開(kāi)啟重試
ROBOTSTXT_OBEY = False # 遵守網(wǎng)站robot協(xié)議,一般是不遵守的···········
DOWNLOADER_MIDDLEWARES = { # 下載中間件
'myproject.middlewares.MyDownloaderMiddleware': 543,
}
ITEM_PIPELINES = { # 數(shù)據(jù)處理、存儲(chǔ)pipeline
'myproject.pipelines.MyPipeline': 300,
}