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