Settings
Scrapy設定(settings)提供了定制Scrapy元件的方法。您可以控制包括核心(core),插件(extension),pipeline及spider元件。
設定為代碼提供了提取以key-value映射的配置值的的全局命名空間(namespace)。 設定可以通過下面介紹的多種機制進行設定。
設定(settings)同時也是選擇目前激活的Scrapy項目的方法(如果您有多個的話)。
内置設定清單請參考 内置設定參考手冊 。
指定設定(Designating the settings)
當您使用Scrapy時,您需要聲明您所使用的設定。這可以通過使用環境變量:
SCRAPY_SETTINGS_MODULE
來完成。
SCRAPY_SETTINGS_MODULE
必須以Python路徑文法編寫, 如
myproject.settings
。 注意,設定子產品應該在 Python import search path 中。
擷取設定值(Populating the settings)
設定可以通過多種方式設定,每個方式具有不同的優先級。 下面以優先級降序的方式給出方式清單:
- 指令行選項(Command line Options)(最高優先級)
- 項目設定子產品(Project settings module)
- 指令預設設定子產品(Default settings per-command)
- 全局預設設定(Default global settings) (最低優先級)
這些設定(settings)由scrapy内部很好的進行了處理,不過您仍可以使用API調用來手動處理。 詳情請參考 設定(Settings) API.
這些機制将在下面詳細介紹。
1. 指令行選項(Command line options)
指令行傳入的參數具有最高的優先級。 您可以使用command line 選項
-s
(或
--set
) 來覆寫一個(或更多)選項。
樣例:
scrapy crawl myspider -s LOG_FILE=scrapy.log
2. 項目設定子產品(Project settings module)
項目設定子產品是您Scrapy項目的标準配置檔案。 其是擷取大多數設定的方法。例如::
myproject.settings
。
3. 指令預設設定(Default settings per-command)
每個 Scrapy tool 指令擁有其預設設定,并覆寫了全局預設的設定。 這些設定在指令的類的
default_settings
屬性中指定。
4. 預設全局設定(Default global settings)
全局預設設定存儲在
scrapy.settings.default_settings
子產品, 并在 内置設定參考手冊 部分有所記錄。
如何通路設定(How to access settings)
設定可以通過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 提供的方法來實作。
設定名字的命名規則
設定的名字以要配置的元件作為字首。 例如,一個robots.txt插件的合适設定應該為
ROBOTSTXT_ENABLED
,
ROBOTSTXT_OBEY
,
ROBOTSTXT_CACHEDIR
等等。
内置設定參考手冊
這裡以字母序給出了所有可用的Scrapy設定及其預設值和應用範圍。
如果給出可用範圍,并綁定了特定的元件,則說明了該設定使用的地方。 這種情況下将給出該元件的子產品,通常來說是插件、中間件或pipeline。 同時也意味着為了使設定生效,該元件必須被啟用。
AWS_ACCESS_KEY_ID
預設:
None
連接配接 Amazon Web services 的AWS access key。 S3 feed storage backend 中使用.
AWS_SECRET_ACCESS_KEY
預設:
None
連接配接 Amazon Web services 的AWS secret key。 S3 feed storage backend 中使用。
BOT_NAME
預設:
'scrapybot'
Scrapy項目實作的bot的名字(也未項目名稱)。 這将用來構造預設 User-Agent,同時也用來log。
當您使用
startproject
指令建立項目時其也被自動指派。
CONCURRENT_ITEMS
預設:
100
Item Processor(即 Item Pipeline) 同時處理(每個response的)item的最大值。
CONCURRENT_REQUESTS
預設:
16
Scrapy downloader 并發請求(concurrent requests)的最大值。
CONCURRENT_REQUESTS_PER_DOMAIN
預設:
8
對單個網站進行并發請求的最大值。
CONCURRENT_REQUESTS_PER_IP
預設:
對單個IP進行并發請求的最大值。如果非0,則忽略
CONCURRENT_REQUESTS_PER_DOMAIN
設定, 使用該設定。 也就是說,并發限制将針對IP,而不是網站。
該設定也影響
DOWNLOAD_DELAY
: 如果
CONCURRENT_REQUESTS_PER_IP
非0,下載下傳延遲應用在IP而不是網站上。
DEFAULT_ITEM_CLASS
預設:
'scrapy.item.Item'
the Scrapy shell 中執行個體化item使用的預設類。
DEFAULT_REQUEST_HEADERS
預設:
{
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en',
}
Scrapy HTTP Request使用的預設header。由
DefaultHeadersMiddleware
産生。
DEPTH_LIMIT
預設:
爬取網站最大允許的深度(depth)值。如果為0,則沒有限制。
DEPTH_PRIORITY
預設:
整數值。用于根據深度調整request優先級。
如果為0,則不根據深度進行優先級調整。
DEPTH_STATS
預設:
True
是否收集最大深度資料。
DEPTH_STATS_VERBOSE
預設:
False
是否收集詳細的深度資料。如果啟用,每個深度的請求數将會被收集在資料中。
DNSCACHE_ENABLED
預設:
True
是否啟用DNS記憶體緩存(DNS in-memory cache)。
DOWNLOADER
預設:
'scrapy.core.downloader.Downloader'
用于crawl的downloader.
DOWNLOADER_MIDDLEWARES
預設::
{}
儲存項目中啟用的下載下傳中間件及其順序的字典。 更多内容請檢視 激活下載下傳器中間件 。
DOWNLOADER_MIDDLEWARES_BASE
預設:
{
'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
。更多内容請參考 激活下載下傳器中間件.
DOWNLOADER_STATS
預設:
True
是否收集下載下傳器資料。
DOWNLOAD_DELAY
預設:
下載下傳器在下載下傳同一個網站下一個頁面前需要等待的時間。該選項可以用來限制爬取速度, 減輕伺服器壓力。同時也支援小數:
該設定影響(預設啟用的)
RANDOMIZE_DOWNLOAD_DELAY
設定。 預設情況下,Scrapy在兩個請求間不等待一個固定的值, 而是使用0.5到1.5之間的一個随機值 *
DOWNLOAD_DELAY
的結果作為等待間隔。
當
CONCURRENT_REQUESTS_PER_IP
非0時,延遲針對的是每個ip而不是網站。
另外您可以通過spider的
download_delay
屬性為每個spider設定該設定。
DOWNLOAD_HANDLERS
預設:
{}
儲存項目中啟用的下載下傳處理器(request downloader handler)的字典。 例子請檢視DOWNLOAD_HANDLERS_BASE 。
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,
}
DOWNLOAD_TIMEOUT
預設:
180
下載下傳器逾時時間(機關: 秒)。
DUPEFILTER_CLASS
預設:
'scrapy.dupefilter.RFPDupeFilter'
用于檢測過濾重複請求的類。
預設的 (
RFPDupeFilter
) 過濾器基于
scrapy.utils.request.request_fingerprint
函數生成的請求fingerprint(指紋)。 如果您需要修改檢測的方式,您可以繼承
RFPDupeFilter
并覆寫其
request_fingerprint
方法。 該方法接收
Request
對象并傳回其fingerprint(一個字元串)。
DUPEFILTER_DEBUG
預設:
False
預設情況下,
RFPDupeFilter
隻記錄第一次重複的請求。 設定
DUPEFILTER_DEBUG
為
True
将會使其記錄所有重複的requests。
EDITOR
預設: depends on the environment
執行
edit
指令編輯spider時使用的編輯器。 其預設為
EDITOR
環境變量。如果該變量未設定,其預設為
vi
(Unix系統) 或者 IDLE編輯器(Windows)。
EXTENSIONS
預設::
{}
儲存項目中啟用的插件及其順序的字典。
EXTENSIONS_BASE
預設:
{
'scrapy.contrib.corestats.CoreStats': 0,
'scrapy.webservice.WebService': 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,
}
可用的插件清單。需要注意,有些插件需要通過設定來啟用。預設情況下, 該設定包含所有穩定(stable)的内置插件。
更多内容請參考 extensions使用者手冊 及 所有可用的插件 。
ITEM_PIPELINES
預設:
{}
儲存項目中啟用的pipeline及其順序的字典。該字典預設為空,值(value)任意。 不過值(value)習慣設定在0-1000範圍内。
為了相容性,
ITEM_PIPELINES
支援清單,不過已經被廢棄了。
樣例:
ITEM_PIPELINES = {
'mybot.pipelines.validate.ValidateMyItem': 300,
'mybot.pipelines.validate.StoreMyItem': 800,
}
ITEM_PIPELINES_BASE
預設:
{}
儲存項目中預設啟用的pipeline的字典。 永遠不要在項目中修改該設定,而是修改
ITEM_PIPELINES
。
LOG_ENABLED
預設:
True
是否啟用logging。
LOG_ENCODING
預設:
'utf-8'
logging使用的編碼。
LOG_FILE
預設:
None
logging輸出的檔案名。如果為None,則使用标準錯誤輸出(standard error)。
LOG_LEVEL
預設:
'DEBUG'
log的最低級别。可選的級别有: CRITICAL、 ERROR、WARNING、INFO、DEBUG。更多内容請檢視 Logging 。
LOG_STDOUT
預設:
False
如果為
True
,程序所有的标準輸出(及錯誤)将會被重定向到log中。例如, 執行
print 'hello'
,其将會在Scrapy log中顯示。
MEMDEBUG_ENABLED
預設:
False
是否啟用記憶體調試(memory debugging)。
MEMDEBUG_NOTIFY
預設:
[]
如果該設定不為空,當啟用記憶體調試時将會發送一份記憶體報告到指定的位址;否則該報告将寫到log中。
樣例:
MEMUSAGE_ENABLED
預設:
False
Scope:
scrapy.contrib.memusage
是否啟用記憶體使用插件。當Scrapy程序占用的記憶體超出限制時,該插件将會關閉Scrapy程序, 同時發送email進行通知。
See 記憶體使用擴充(Memory usage extension).
MEMUSAGE_LIMIT_MB
預設:
Scope:
scrapy.contrib.memusage
在關閉Scrapy之前所允許的最大記憶體數(機關: MB)(如果 MEMUSAGE_ENABLED為True)。 如果為0,将不做限制。
See 記憶體使用擴充(Memory usage extension).
MEMUSAGE_NOTIFY_MAIL
預設:
False
Scope:
scrapy.contrib.memusage
達到記憶體限制時通知的email清單。
Example:
See 記憶體使用擴充(Memory usage extension).
MEMUSAGE_REPORT
預設:
False
Scope:
scrapy.contrib.memusage
每個spider被關閉時是否發送記憶體使用報告。
檢視 記憶體使用擴充(Memory usage extension).
MEMUSAGE_WARNING_MB
預設:
Scope:
scrapy.contrib.memusage
在發送警告email前所允許的最大記憶體數(機關: MB)(如果 MEMUSAGE_ENABLED為True)。 如果為0,将不發送警告。
NEWSPIDER_MODULE
預設:
''
使用
genspider
指令建立新spider的子產品。
樣例:
RANDOMIZE_DOWNLOAD_DELAY
預設:
True
如果啟用,當從相同的網站擷取資料時,Scrapy将會等待一個随機的值 (0.5到1.5之間的一個随機值 *
DOWNLOAD_DELAY
)。
該随機值降低了crawler被檢測到(接着被block)的機會。某些網站會分析請求, 查找請求之間時間的相似性。
随機的政策與 wget
--random-wait
選項的政策相同。
若
DOWNLOAD_DELAY
為0(預設值),該選項将不起作用。
REDIRECT_MAX_TIMES
預設:
20
定義request允許重定向的最大次數。超過該限制後該request直接傳回擷取到的結果。 對某些任務我們使用Firefox預設值。
REDIRECT_MAX_METAREFRESH_DELAY
預設:
100
有些網站使用 meta-refresh 重定向到session逾時頁面, 是以我們限制自動重定向到最大延遲(秒)。 =>有點不肯定:
REDIRECT_PRIORITY_ADJUST
預設:
+2
修改重定向請求相對于原始請求的優先級。 負數意味着更多優先級。
ROBOTSTXT_OBEY
預設:
False
Scope:
scrapy.contrib.downloadermiddleware.robotstxt
如果啟用,Scrapy将會尊重 robots.txt政策。更多内容請檢視 RobotsTxtMiddleware 。
SCHEDULER
預設:
'scrapy.core.scheduler.Scheduler'
用于爬取的排程器。
SPIDER_CONTRACTS
預設::
{}
儲存項目中啟用用于測試spider的scrapy contract及其順序的字典。 更多内容請參考 Spiders Contracts 。
SPIDER_CONTRACTS_BASE
預設:
{
'scrapy.contracts.default.UrlContract' : 1,
'scrapy.contracts.default.ReturnsContract': 2,
'scrapy.contracts.default.ScrapesContract': 3,
}
儲存項目中預設啟用的scrapy contract的字典。 永遠不要在項目中修改該設定,而是修改
SPIDER_CONTRACTS
。更多内容請參考 Spiders Contracts 。
SPIDER_MIDDLEWARES
預設::
{}
儲存項目中啟用的下載下傳中間件及其順序的字典。 更多内容請參考 激活spider中間件 。
SPIDER_MIDDLEWARES_BASE
預設:
{
'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
。更多内容請參考 激活spider中間件.
SPIDER_MODULES
預設:
[]
Scrapy搜尋spider的子產品清單。
樣例:
STATS_CLASS
預設:
'scrapy.statscol.MemoryStatsCollector'
收集資料的類。該類必須實作 狀态收集器(Stats Collector) API.
STATS_DUMP
預設:
True
當spider結束時dump Scrapy狀态資料 (到Scrapy log中)。
更多内容請檢視 資料收集(Stats Collection) 。
STATSMAILER_RCPTS
預設:
[]
(空list)
spider完成爬取後發送Scrapy資料。更多内容請檢視
StatsMailer
。
TELNETCONSOLE_ENABLED
預設:
True
表明 telnet 終端 (及其插件)是否啟用的布爾值。
TELNETCONSOLE_PORT
預設:
[6023, 6073]
telnet終端使用的端口範圍。如果設定為
None
或
, 則使用動态配置設定的端口。更多内容請檢視Telnet終端(Telnet Console) 。
TEMPLATES_DIR
預設: scrapy子產品内部的
templates
使用
startproject
指令建立項目時查找模闆的目錄。
URLLENGTH_LIMIT
預設:
2083
Scope:
contrib.spidermiddleware.urllength
爬取URL的最大長度。更多關于該設定的預設值資訊請檢視:http://www.boutell.com/newfaq/misc/urllength.html
USER_AGENT
預設:
"Scrapy/VERSION (+http://scrapy.org)"
爬取的預設User-Agent,除非被覆寫。