Scrapy 設定(settings)提供了定制 Scrapy 組件的方法。您可以控制包括核心(core),插件(extension),pipeline 及 spider 組件。
設定為代碼提供了提取以 key-value 映射的配置值的的全局命名空間(namespace)。設定可以通過下面介紹的多種機制進行設置。
設定(settings)同時也是選擇當前激活的 Scrapy 項目的方法(如果您有多個的話)。
內(nèi)置設定列表請參考內(nèi)置設定參考手冊。
當您使用 Scrapy 時,您需要聲明您所使用的設定。這可以通過使用環(huán)境變量: SCRAPY_SETTINGS_MODULE 來完成。
SCRAPY_SETTINGS_MODULE 必須以 Python 路徑語法編寫,如 myproject.settings。 注意,設定模塊應該在 Python import search path 中。
設定可以通過多種方式設置,每個方式具有不同的優(yōu)先級。 下面以優(yōu)先級降序的方式給出方式列表:
這些設定(settings)由 scrapy 內(nèi)部很好的進行了處理,不過您仍可以使用 API 調用來手動處理。 詳情請參考 設置(Settings) API。
這些機制將在下面詳細介紹。
命令行傳入的參數(shù)具有最高的優(yōu)先級。 您可以使用 command line 選項-s(或 --set) 來覆蓋一個(或更多)選項。
樣例:
scrapy crawl myspider -s LOG_FILE=scrapy.log
項目設定模塊是您 Scrapy 項目的標準配置文件。 其是獲取大多數(shù)設定的方法。例如:: myproject.settings。
每個 Scrapy tool 命令擁有其默認設定,并覆蓋了全局默認的設定。 這些設定在命令的類的 default_settings 屬性中指定。
全局默認設定存儲在 scrapy.settings.default_settings 模塊,并在內(nèi)置設定參考手冊部分有所記錄。
設定可以通過 Crawler 的 scrapy.crawler.Crawler.settings 屬性進行訪問。其由插件及中間件的 from_crawler 方法所傳入:
class MyExtension(object):
@classmethod
def from_crawler(cls, crawler):
settings = crawler.settings
if settings['LOG_ENABLED']:
print "log is enabled!"
另外,設定可以以字典方式進行訪問。不過為了避免類型錯誤, 通常更希望返回需要的格式。 這可以通過 Settings API 提供的方法來實現(xiàn)。
設定的名字以要配置的組件作為前綴。例如,一個 robots.txt 插件的合適設定應該為 ROBOTSTXT_ENABLED,ROBOTSTXT_OBEY,ROBOTSTXT_CACHEDIR 等等。
這里以字母序給出了所有可用的 Scrapy 設定及其默認值和應用范圍。
如果給出可用范圍,并綁定了特定的組件,則說明了該設定使用的地方。 這種情況下將給出該組件的模塊,通常來說是插件、中間件或 pipeline。 同時也意味著為了使設定生效,該組件必須被啟用。
默認: None
連接 Amazon Web services 的 AWS access key。S3 feed storage backend 中使用。
默認: None
連接 Amazon Web services 的 AWS access key。S3 feed storage backend 中使用。
默認: 'scrapybot'
Scrapy 項目實現(xiàn)的 bot 的名字(也為項目名稱)。 這將用來構造默認 User-Agent,同時也用來 log。
當您使用 startproject 命令創(chuàng)建項目時其也被自動賦值。
默認:100
Item Processor(即 Item Pipeline) 同時處理(每個 response 的)item 的最大值。
默認: 16
Scrapy downloader 并發(fā)請求(concurrent requests)的最大值。
默認: 8
對單個網(wǎng)站進行并發(fā)請求的最大值。
默認: 0
對單個 IP 進行并發(fā)請求的最大值。如果非 0,則忽略 CONCURRENT_REQUESTS_PER_DOMAIN 設定,使用該設定。也就是說,并發(fā)限制將針對 IP,而不是網(wǎng)站。
該設定也影響 DOWNLOAD_DELAY: 如果 CONCURRENT_REQUESTS_PER_IP 非 0,下載延遲應用在 IP 而不是網(wǎng)站上。
默認:'scrapy.item.Item'
the Scrapy shell 中實例化 item 使用的默認類。
默認:
{
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en',
}
Scrapy HTTP Request 使用的默認 header。由 DefaultHeadersMiddleware 產(chǎn)生。
默認:0
爬取網(wǎng)站最大允許的深度(depth)值。如果為 0,則沒有限制。
默認:0
整數(shù)值。用于根據(jù)深度調整 request 優(yōu)先級。
如果為 0,則不根據(jù)深度進行優(yōu)先級調整。
默認:True
是否收集最大深度數(shù)據(jù)。
默認: False
是否收集詳細的深度數(shù)據(jù)。如果啟用,每個深度的請求數(shù)將會被收集在數(shù)據(jù)中。
默認: True
是否啟用 DNS 內(nèi)存緩存(DNS in-memory cache)。
默認: 'scrapy.core.downloader.Downloader'
用于 crawl 的 downloader.
默認:: {}
保存項目中啟用的下載中間件及其順序的字典。 更多內(nèi)容請查看激活下載器中間件。
默認:
{
'scrapy.contrib.downloadermiddleware.robotstxt.RobotsTxtMiddleware': 100,
'scrapy.contrib.downloadermiddleware.httpauth.HttpAuthMiddleware': 300,
'scrapy.contrib.downloadermiddleware.downloadtimeout.DownloadTimeoutMiddleware': 350,
'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': 400,
'scrapy.contrib.downloadermiddleware.retry.RetryMiddleware': 500,
'scrapy.contrib.downloadermiddleware.defaultheaders.DefaultHeadersMiddleware': 550,
'scrapy.contrib.downloadermiddleware.redirect.MetaRefreshMiddleware': 580,
'scrapy.contrib.downloadermiddleware.httpcompression.HttpCompressionMiddleware': 590,
'scrapy.contrib.downloadermiddleware.redirect.RedirectMiddleware': 600,
'scrapy.contrib.downloadermiddleware.cookies.CookiesMiddleware': 700,
'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 750,
'scrapy.contrib.downloadermiddleware.chunked.ChunkedTransferMiddleware': 830,
'scrapy.contrib.downloadermiddleware.stats.DownloaderStats': 850,
'scrapy.contrib.downloadermiddleware.httpcache.HttpCacheMiddleware': 900,
}
包含 Scrapy 默認啟用的下載中間件的字典。永遠不要在項目中修改該設定,而是修改 DOWNLOADER_MIDDLEWARES。更多內(nèi)容請參考激活下載器中間件。
默認:True
是否收集下載器數(shù)據(jù)。
默認:0
下載器在下載同一個網(wǎng)站下一個頁面前需要等待的時間。該選項可以用來限制爬取速度,減輕服務器壓力。同時也支持小數(shù):
DOWNLOAD_DELAY = 0.25 # 250 ms of delay
該設定影響(默認啟用的)RANDOMIZE_DOWNLOAD_DELAY 設定。 默認情況下,Scrapy 在兩個請求間不等待一個固定的值, 而是使用 0.5 到 1.5 之間的一個隨機值 * DOWNLOAD_DELAY 的結果作為等待間隔。
當 CONCURRENT_REQUESTS_PER_IP 非 0 時,延遲針對的是每個 ip 而不是網(wǎng)站。
另外您可以通過 spider 的 download_delay 屬性為每個 spider 設置該設定。
默認:{}
保存項目中啟用的下載處理器(request downloader handler)的字典。 例子請查看 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)的字典。 永遠不要在項目中修改該設定,而是修改 DOWNLOADER_HANDLERS。
如果需要關閉上面的下載處理器,您必須在項目中的 DOWNLOAD_HANDLERS 設定中設置該處理器,并為其賦值為 None。例如,關閉文件下載處理器:
DOWNLOAD_HANDLERS = {
'file': None,
}
默認:180
下載器超時時間(單位: 秒)。
注解
該超時值可以使用
download_timeout來對每個 spider 進行設置,也可以使用download_timeoutRequest.meta key 來對每個請求進行設置。 This feature needs Twisted >= 11.1.
Default:1073741824 (1024MB)
The maximum response size (in bytes) that downloader will download.
If you want to disable it set to 0.
注解
This size can be set per spider using
download_maxsizespider attribute and per-request usingdownload_maxsizeRequest.meta key.
Default:33554432 (32Mb)
The response size (in bytes) that downloader will start to warn.
If you want to disable it set to 0.
注解
This size can be set per spider using
download_warnsizespider attribute and per-request usingdownload_warnsizeRequest.meta key.This feature needs Twisted >= 11.1.
默認:'scrapy.dupefilter.RFPDupeFilter'
用于檢測過濾重復請求的類。
默認的 (RFPDupeFilter) 過濾器基于 scrapy.utils.request.request_fingerprint 函數(shù)生成的請求 fingerprint(指紋)。 如果您需要修改檢測的方式,您可以繼承 RFPDupeFilter 并覆蓋其 request_fingerprint 方法。 該方法接收 Request 對象并返回其 fingerprint(一個字符串)。
默認:False
默認情況下,RFPDupeFilter 只記錄第一次重復的請求。設置 DUPEFILTER_DEBUG 為 True 將會使其記錄所有重復的 requests。
默認:depends on the environment
執(zhí)行 edit 命令編輯 spider 時使用的編輯器。其默認為 EDITOR 環(huán)境變量。如果該變量未設置,其默認為 vi(Unix 系統(tǒng)) 或者 IDLE 編輯器(Windows)。
默認:: {}
保存項目中啟用的插件及其順序的字典。
默認:
{
'scrapy.contrib.corestats.CoreStats': 0,
'scrapy.telnet.TelnetConsole': 0,
'scrapy.contrib.memusage.MemoryUsage': 0,
'scrapy.contrib.memdebug.MemoryDebugger': 0,
'scrapy.contrib.closespider.CloseSpider': 0,
'scrapy.contrib.feedexport.FeedExporter': 0,
'scrapy.contrib.logstats.LogStats': 0,
'scrapy.contrib.spiderstate.SpiderState': 0,
'scrapy.contrib.throttle.AutoThrottle': 0,
}
可用的插件列表。需要注意,有些插件需要通過設定來啟用。默認情況下,該設定包含所有穩(wěn)定(stable)的內(nèi)置插件。
更多內(nèi)容請參考 extensions 用戶手冊及所有可用的插件。
默認:{}
保存項目中啟用的 pipeline 及其順序的字典。該字典默認為空,值(value)任意。不過值(value)習慣設定在 0-1000 范圍內(nèi)。
為了兼容性,ITEM_PIPELINES 支持列表,不過已經(jīng)被廢棄了。
樣例:
ITEM_PIPELINES = {
'mybot.pipelines.validate.ValidateMyItem': 300,
'mybot.pipelines.validate.StoreMyItem': 800,
}
默認:{}
保存項目中默認啟用的 pipeline 的字典。永遠不要在項目中修改該設定,而是修改 ITEM_PIPELINES。
默認:True
是否啟用 logging。
默認:'utf-8'
logging 使用的編碼。
默認:None
logging 輸出的文件名。如果為 None,則使用標準錯誤輸出(standard error)。
默認:'DEBUG'
log 的最低級別??蛇x的級別有: CRITICAL、ERROR、WARNING、INFO、DEBUG。更多內(nèi)容請查看 Logging。
默認:False
如果為 True,進程所有的標準輸出(及錯誤)將會被重定向到 log 中。例如,執(zhí)行 print 'hello',其將會在 Scrapy log 中顯示。
默認:False
是否啟用內(nèi)存調試(memory debugging)。
默認:[]
如果該設置不為空,當啟用內(nèi)存調試時將會發(fā)送一份內(nèi)存報告到指定的地址;否則該報告將寫到 log 中。
樣例:
MEMDEBUG_NOTIFY = ['user@example.com']
默認:False
Scope:scrapy.contrib.memusage
是否啟用內(nèi)存使用插件。當 Scrapy 進程占用的內(nèi)存超出限制時,該插件將會關閉 Scrapy 進程, 同時發(fā)送 email 進行通知。
See內(nèi)存使用擴展(Memory usage extension)。
默認:0
Scope: scrapy.contrib.memusage
在關閉 Scrapy 之前所允許的最大內(nèi)存數(shù)(單位: MB)(如果 MEMUSAGE_ENABLED 為 True)。 如果為 0,將不做限制。
See內(nèi)存使用擴展(Memory usage extension)。
默認:False
Scope:scrapy.contrib.memusage
達到內(nèi)存限制時通知的 email 列表。
Example:
MEMUSAGE_NOTIFY_MAIL = ['user@example.com']
See內(nèi)存使用擴展(Memory usage extension)。
默認:False
Scope:scrapy.contrib.memusage
每個 spider 被關閉時是否發(fā)送內(nèi)存使用報告。
查看內(nèi)存使用擴展(Memory usage extension)
默認:0
Scope:scrapy.contrib.memusage
在發(fā)送警告 email 前所允許的最大內(nèi)存數(shù)(單位: MB)(如果 MEMUSAGE_ENABLED 為 True)。如果為 0,將不發(fā)送警告。
默認:''
使用 genspider 命令創(chuàng)建新 spider 的模塊。
樣例:
NEWSPIDER_MODULE = 'mybot.spiders_dev'
默認:True
如果啟用,當從相同的網(wǎng)站獲取數(shù)據(jù)時,Scrapy 將會等待一個隨機的值 (0.5 到 1.5 之間的一個隨機值* DOWNLOAD_DELAY)。
該隨機值降低了 crawler 被檢測到(接著被 block)的機會。某些網(wǎng)站會分析請求, 查找請求之間時間的相似性。
隨機的策略與 wget --random-wait 選項的策略相同。
若 DOWNLOAD_DELAY 為 0(默認值),該選項將不起作用。
默認:20
定義 request 允許重定向的最大次數(shù)。超過該限制后該 request 直接返回獲取到的結果。 對某些任務我們使用 Firefox 默認值。
默認:100
有些網(wǎng)站使用 meta-refresh 重定向到 session 超時頁面,因此我們限制自動重定向到最大延遲(秒)。=>有點不肯定:
默認:+2
修改重定向請求相對于原始請求的優(yōu)先級。 負數(shù)意味著更多優(yōu)先級。
默認:False
Scope:scrapy.contrib.downloadermiddleware.robotstxt
如果啟用,Scrapy 將會尊重 robots.txt 策略。更多內(nèi)容請查看 RobotsTxtMiddleware。
默認:'scrapy.core.scheduler.Scheduler'
用于爬取的調度器。
默認::{}
保存項目中啟用用于測試 spider 的 scrapy contract 及其順序的字典。 更多內(nèi)容請參考 Spiders Contracts。
默認:
{
'scrapy.contracts.default.UrlContract' : 1,
'scrapy.contracts.default.ReturnsContract': 2,
'scrapy.contracts.default.ScrapesContract': 3,
}
保存項目中默認啟用的 scrapy contract 的字典。永遠不要在項目中修改該設定,而是修改 SPIDER_CONTRACTS。更多內(nèi)容請參考 Spiders Contracts。
默認:'scrapy.spidermanager.SpiderManager'
用于管理 spider 的類。該類必須實現(xiàn) SpiderManager API。
默認:: {}
保存項目中啟用的下載中間件及其順序的字典。更多內(nèi)容請參考激活 spider 中間件。
默認:
{
'scrapy.contrib.spidermiddleware.httperror.HttpErrorMiddleware': 50,
'scrapy.contrib.spidermiddleware.offsite.OffsiteMiddleware': 500,
'scrapy.contrib.spidermiddleware.referer.RefererMiddleware': 700,
'scrapy.contrib.spidermiddleware.urllength.UrlLengthMiddleware': 800,
'scrapy.contrib.spidermiddleware.depth.DepthMiddleware': 900,
}
保存項目中默認啟用的 spider 中間件的字典。永遠不要在項目中修改該設定,而是修改 SPIDER_MIDDLEWARES。更多內(nèi)容請參考激活 spider 中間件。
默認:[]
Scrapy 搜索 spider 的模塊列表。
樣例:
SPIDER_MODULES = ['mybot.spiders_prod', 'mybot.spiders_dev']
默認:'scrapy.statscol.MemoryStatsCollector'
收集數(shù)據(jù)的類。該類必須實現(xiàn)狀態(tài)收集器(Stats Collector) API。
默認:True
當 spider 結束時 dump Scrapy 狀態(tài)數(shù)據(jù) (到 Scrapy log 中)。
更多內(nèi)容請查看數(shù)據(jù)收集(Stats Collection)。
默認:[](空 list)
spider 完成爬取后發(fā)送 Scrapy 數(shù)據(jù)。更多內(nèi)容請查看 StatsMailer。
默認:True
表明 Telnet 終端(及其插件)是否啟用的布爾值。
默認:[6023, 6073]
telnet 終端使用的端口范圍。如果設置為 None 或 0, 則使用動態(tài)分配的端口。更多內(nèi)容請查看 Telnet 終端(Telnet Console) 。
默認: scrapy 模塊內(nèi)部的 templates
使用 startproject 命令創(chuàng)建項目時查找模板的目錄。
默認:2083
Scope:contrib.spidermiddleware.urllength
爬取 URL 的最大長度。更多關于該設定的默認值信息請查看:
http://www.boutell.com/newfaq/misc/urllength.html
默認:"Scrapy/VERSION (+http://scrapy.org)"
爬取的默認 User-Agent,除非被覆蓋。