Scrapy設(shè)定(settings)提供了定制Scrapy組件的方法。你可以控制包括核心(core)懦冰,插件(extension)灶轰,pipeline及spider組件刷钢。設(shè)定為代碼提供了提取以key-value映射的配置值的的全局命名空間(namespace)笋颤。
Scrapy內(nèi)置設(shè)置
下面給出scrapy提供的常用內(nèi)置設(shè)置列表,你可以在settings.py文件里面修改這些設(shè)置,以應(yīng)用或者禁用這些設(shè)置項内地。
- BOT_NAME
默認: 'scrapybot'
Scrapy項目實現(xiàn)的bot的名字伴澄。用來構(gòu)造默認 User-Agent阱缓,同時也用來log荆针。
當你使用 startproject 命令創(chuàng)建項目時其也被自動賦值。 - CONCURRENT_ITEMS
默認: 100
Item Processor(即 Item Pipeline) 同時處理(每個response的)item的最大值 - CONCURRENT_REQUESTS
默認: 16
Scrapy downloader 并發(fā)請求(concurrent requests)的最大值玖媚。 - CONCURRENT_REQUESTS_PER_DOMAIN
默認: 8
對單個網(wǎng)站進行并發(fā)請求的最大值。 - CONCURRENT_REQUESTS_PER_IP
默認: 0
對單個IP進行并發(fā)請求的最大值突雪。如果非0,則忽略 CONCURRENT_REQUESTS_PER_DOMAIN 設(shè)定督函, 使用該設(shè)定垄分。 也就是說叫倍,并發(fā)限制將針對IP坐求,而不是網(wǎng)站蚕泽。
該設(shè)定也影響 DOWNLOAD_DELAY: 如果 CONCURRENT_REQUESTS_PER_IP 非0,下載延遲應(yīng)用在IP而不是網(wǎng)站上桥嗤。 - DEFAULT_ITEM_CLASS
默認: 'scrapy.item.Item'
the Scrapy shell 中實例化item使用的默認類须妻。 - DEFAULT_REQUEST_HEADERS
默認:
Scrapy HTTP Request使用的默認header。由 DefaultHeadersMiddleware 產(chǎn)生泛领。{ 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'en', }
- DOWNLOADER
默認: 'scrapy.core.downloader.Downloader'
用于crawl的downloader. - DOWNLOADER_MIDDLEWARES
默認:: {}
保存項目中啟用的下載中間件及其順序的字典荒吏。 - DOWNLOAD_DELAY
默認: 0
下載器在下載同一個網(wǎng)站下一個頁面前需要等待的時間。該選項可以用來限制爬取速度师逸, 減輕服務(wù)器壓力司倚。同時也支持小數(shù): - DOWNLOAD_HANDLERS
默認: {}
保存項目中啟用的下載處理器(request downloader handler)的字典。 - DOWNLOAD_TIMEOUT
默認: 180
下載器超時時間(單位: 秒)篓像。 - EXTENSIONS
默認:{}
保存項目中啟用的插件及其順序的字典动知。 - ITEM_PIPELINES
默認: {}
保存項目中啟用的pipeline及其順序的字典。該字典默認為空员辩,值(value)任意盒粮。 不過值(value)習慣設(shè)定在0-1000范圍內(nèi)。 - ITEM_PIPELINES_BASE
默認: {}
保存項目中默認啟用的pipeline的字典奠滑。 永遠不要在項目中修改該設(shè)定丹皱,而是修改 ITEM_PIPELINES 妒穴。 - LOG_ENABLED
默認: True
是否啟用logging。 - LOG_ENCODING
默認: 'utf-8'
logging使用的編碼摊崭。 - LOG_FILE
默認: None
logging輸出的文件名讼油。如果為None,則使用標準錯誤輸出(standard error)呢簸。 - LOG_FORMAT
默認: '%(asctime)s [%(name)s] %(levelname)s: %(message)s'
日志的數(shù)據(jù)格式 - LOG_DATEFORMAT
默認: '%Y-%m-%d %H:%M:%S'
日志的日期格式 - LOG_LEVEL
默認: 'DEBUG'
log的最低級別矮台。可選的級別有: CRITICAL根时、 ERROR瘦赫、WARNING、INFO蛤迎、DEBUG确虱。 - LOG_STDOUT
默認: False
如果為 True ,進程所有的標準輸出(及錯誤)將會被重定向到log中替裆。 - RANDOMIZE_DOWNLOAD_DELAY
默認: True
如果啟用校辩,當從相同的網(wǎng)站獲取數(shù)據(jù)時,Scrapy將會等待一個隨機的值 (0.5到1.5之間的一個隨機值 * DOWNLOAD_DELAY)扎唾。
該隨機值降低了crawler被檢測到(接著被block)的機會召川。某些網(wǎng)站會分析請求, 查找請求之間時間的相似性胸遇。 - REDIRECT_MAX_TIMES
默認: 20
定義request允許重定向的最大次數(shù)荧呐。超過該限制后該request直接返回獲取到的結(jié)果。 對某些任務(wù)我們使用Firefox默認值纸镊。 - ROBOTSTXT_OBEY
默認: False
是否遵循robots協(xié)議 - SCHEDULER
默認: 'scrapy.core.scheduler.Scheduler'
用于爬取的調(diào)度器倍阐。 - SPIDER_MIDDLEWARES
默認: {}
保存項目中啟用的下載中間件及其順序的字典。 - USER_AGENT
默認: "Scrapy/VERSION (+http://scrapy.org)"
爬取的默認User-Agent逗威,除非被覆蓋峰搪。
Scrapy默認BASE設(shè)置
scrapy對某些內(nèi)部組件進行了默認設(shè)置,這些組件通常情況下是不能被修改的凯旭,但是我們在自定義了某些組件以后概耻,比如我們設(shè)置了自定義的middleware中間件,需要按照一定的順序把他添加到組件之中罐呼,這個時候需要參考scrapy的默認設(shè)置鞠柄,因為這個順序會影響scrapy的執(zhí)行,下面列出了scrapy的默認基礎(chǔ)設(shè)置嫉柴。
注意:如果你想要修改以下的某些設(shè)置厌杜,應(yīng)該避免直接修改下列內(nèi)容,而是修改其對應(yīng)的自定義內(nèi)容,例如夯尽,你想修改下面的DOWNLOADER_MIDDLEWARES_BASE
的內(nèi)容瞧壮,你應(yīng)該去修改DOWNLOADER_MIDDLEWARES
這個內(nèi)容,只是去掉了_BASE
而已匙握,其他的也是類似這樣咆槽。
-
DOWNLOADER_MIDDLEWARES_BASE
默認:{ 'scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware': 100, 'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware': 300, 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware': 350, 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 400, 'scrapy.downloadermiddlewares.retry.RetryMiddleware': 500, 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware': 550, 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware': 580, 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 590, 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware': 600, 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware': 700, 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 750, 'scrapy.downloadermiddlewares.chunked.ChunkedTransferMiddleware': 830, 'scrapy.downloadermiddlewares.stats.DownloaderStats': 850, 'scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware': 900, }
包含Scrapy默認啟用的下載中間件的字典。 永遠不要在項目中修改該設(shè)定肺孤,而是修改 DOWNLOADER_MIDDLEWARES 罗晕。
-
SPIDER_MIDDLEWARES_BASE
默認:{ 'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware': 50, 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware': 500, 'scrapy.spidermiddlewares.referer.RefererMiddleware': 700, 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware': 800, 'scrapy.spidermiddlewares.depth.DepthMiddleware': 900, }
保存項目中默認啟用的spider中間件的字典济欢。 永遠不要在項目中修改該設(shè)定赠堵,而是修改 SPIDER_MIDDLEWARES 。
-
EXTENSIONS_BASE
默認:{ 'scrapy.extensions.corestats.CoreStats': 0, 'scrapy.telnet.TelnetConsole': 0, 'scrapy.extensions.memusage.MemoryUsage': 0, 'scrapy.extensions.memdebug.MemoryDebugger': 0, 'scrapy.extensions.closespider.CloseSpider': 0, 'scrapy.extensions.feedexport.FeedExporter': 0, 'scrapy.extensions.logstats.LogStats': 0, 'scrapy.extensions.spiderstate.SpiderState': 0, 'scrapy.extensions.throttle.AutoThrottle': 0, }
可用的插件列表法褥。需要注意茫叭,有些插件需要通過設(shè)定來啟用。默認情況下半等, 該設(shè)定包含所有穩(wěn)定(stable)的內(nèi)置插件揍愁。
-
DOWNLOAD_HANDLERS_BASE
默認:{ 'file': 'scrapy.core.downloader.handlers.file.FileDownloadHandler', 'http': 'scrapy.core.downloader.handlers.http.HttpDownloadHandler', 'https': 'scrapy.core.downloader.handlers.http.HttpDownloadHandler', 's3': 'scrapy.core.downloader.handlers.s3.S3DownloadHandler', }
保存項目中默認啟用的下載處理器(request downloader handler)的字典。 永遠不要在項目中修改該設(shè)定杀饵,而是修改 DOWNLOADER_HANDLERS 莽囤。
如果需要關(guān)閉上面的下載處理器,您必須在項目中的 DOWNLOAD_HANDLERS 設(shè)定中設(shè)置該處理器切距,并為其賦值為 None 朽缎。
說明
即使我們添加了一些我們自定義的組件,scrapy默認的base設(shè)置依然會被應(yīng)用谜悟,這樣說可能會一頭霧水话肖,簡單地例子:
假如我們在middlewares.py文件中定義了一個中間件,名稱為MyMiddleware葡幸,我們把它添加到settings.py文件里面的DOWNLOADER_MIDDLEWARES
最筒,且他的執(zhí)行順序我們設(shè)置為450,最終的設(shè)置內(nèi)容就是:
DOWNLOADER_MIDDLEWARES = {
'cnblog.middlewares.MyMiddleware':450,
}
我們再來看一下默認的DOWNLOADER_MIDDLEWARES_BASE
的內(nèi)容:
DOWNLOADER_MIDDLEWARES_BASE ={
'scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware': 100,
'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware': 300,
'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware': 350,
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 400,
'scrapy.downloadermiddlewares.retry.RetryMiddleware': 500,
'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware': 550,
'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware': 580,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 590,
'scrapy.downloadermiddlewares.redirect.RedirectMiddleware': 600,
'scrapy.downloadermiddlewares.cookies.CookiesMiddleware': 700,
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 750,
'scrapy.downloadermiddlewares.chunked.ChunkedTransferMiddleware': 830,
'scrapy.downloadermiddlewares.stats.DownloaderStats': 850,
'scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware': 900,
}
這個時候蔚叨,scrapy下載中間件的最終的執(zhí)行順序就是床蜘,把DOWNLOADER_MIDDLEWARES
和DOWNLOADER_MIDDLEWARES_BASE
里面的中間件按照順序執(zhí)行,100>300>350>400>450>500>550>580>590>600>700>750>830>850>900
且全部執(zhí)行蔑水,并不會因為我們定義了一個中間件邢锯,而使默認的中間件失效,也就是說肤粱,最終的結(jié)果其實是合并執(zhí)行弹囚。
如果我們不想應(yīng)用某一個默認的中間件,假如'scrapy.downloadermiddlewares.retry.RetryMiddleware': 500,
那么领曼,就應(yīng)該在DOWNLOADER_MIDDLEWARES
里面把它的值設(shè)置為None鸥鹉,像下面這樣:
DOWNLOADER_MIDDLEWARES = {
'cnblog.middlewares.MyMiddleware':450,
'scrapy.downloadermiddlewares.retry.RetryMiddleware':None蛮穿,
}