天天看點

七.scrapy settings中文版 Settings

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)

設定可以通過多種方式設定,每個方式具有不同的優先級。 下面以優先級降序的方式給出方式清單:

  1. 指令行選項(Command line Options)(最高優先級)
  2. 項目設定子產品(Project settings module)
  3. 指令預設設定子產品(Default settings per-command)
  4. 全局預設設定(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,除非被覆寫。

繼續閱讀