1. 程式人生 > >Scrapy1.5基本概念(十一)——配置項(Settings)

Scrapy1.5基本概念(十一)——配置項(Settings)

本文為譯文,原文見地址:https://docs.scrapy.org/en/latest/topics/settings.html

配置項

Scrapy配置項允許你自定義所有Scrapy元件的行為,包括核心、擴充套件、管道和爬蟲本身。

配置項的基礎結構提供了鍵值對映的全域性名稱空間,程式碼可以在專案的任意地方使用該名稱空間來提取配置項的值。配置項還可以通過不同的機制來填充資料,後續我們會介紹。

這些配置項同時也是選擇當前活動的Scrapy專案的機制(如果有多個專案的話)。

內建的配置項引用,請見這裡

指定配置

當你使用Scrapy時,你必須告訴它,你正在使用的配置是哪一個。你可以使用一個環境變數SCRAPY_SETTINGS_MODULE來實現這一目的。

SCRAPY_SETTINGS_MODULE的值應該是Python的路徑語法,比如:myproject.settings。需要注意,配置項模組應該在Python的匯入搜尋路徑上。

填充配置

可以通過不同的機制來填充配置項,每一種機制都有不同的優先順序。下面是一份這些機制按照優先順序遞減的列表:

  1. 命令列選項(最高優先順序)
  2. 每個爬蟲的配置
  3. 專案配置模組
  4. 每個命令的預設配置
  5. 預設的全域性配置項(最低優先順序)

這些配置項的源的填充在內部就得到了處理,但是也可以使用API呼叫來手動處理。詳情見主題:配置項API

下面將介紹這些機制。

命令列選項

由命令列提供引數的方式擁有最高的優先順序,它將覆蓋其他機制的配置。你可以通過使用-s(或者–set)命令列選項來顯式重寫一個(或多個)配置項。

示例:

scrapy crawl myspider -s LOG_FILE=scrapy.log

每個爬蟲的配置

爬蟲(詳情見爬蟲章節)可以定義它們自己的配置項,這些配置項將會覆蓋專案級的配置項。可以通過設定爬蟲的custom_settings屬性來實現這一點:

class MySpider(scrapy.Spider):
	name = 'myspider'
	custom_settings = {
		'SOME_SETTING'
: "some value', }

專案配置模組

專案配置項模組是你的專案中的一個標準配置檔案,這個檔案是填充你大多數自定義配置項的地方。在標準的Scrapy專案中,這意味著你需要在你的專案中建立一個settings.py檔案,這個檔案用來新增和變更配置項。

每個命令的預設配置

每個Scrapy工具命令可以擁有它自己預設的配置項,這些配置項將覆蓋全域性預設配置項。這些自定義命令配置項在命令類的default_settings屬性中指定。

預設的全域性配置項

全域性預設配置項在scrapy.settings.default_settings模組中,並且它的文件可以在內建的配置引用找到。

如何訪問配置

在一個爬蟲中,可以通過self.settings訪問所有配置項:

class MySpider(scrapy.Spider):
	name = 'myspider'
	start_urls = ['http://example.com']

	def parse(self, response):
		print("Existing settings: %s" % self.settings.attributes.keys())

注意:當爬蟲初始化後,在基礎Spider類中將設定settings屬性。如果你希望在初始化之前使用settings(比如,在爬蟲的__init__()函式中),你需要重寫from_cralwer()函式。

可以通過擴充套件、中介軟體和資料項管道中傳遞給from_cralwer()函式的Crawler物件來訪問配置項,即訪問了scray.crawler.Crawler.settings屬性:

class MyExtension(object):
	def __init__(self, log_is_enabled=False)
		if log_is_enabled:
			print('log is enabled!')

	@classmethod
	def from_crawler(cls, crawler):
		settings = crawler.settings
		return cls(settings.getbool('LOG_ENABLED'))

該settings物件可以像字典一樣使用(比如settings[‘LOG_ENABLED’]),但通常我們使用Settings提供的API來提取我們需要的配置項,這樣可以避免型別錯誤。

配置名稱的基本原理

配置項的名稱通常以它們要配置的元件作為字首。例如,虛構的robots.txt擴充套件,其配置項命名一般可以是ROBOTSTXT_ENABLED,ROBOTSTXT_OBEY,ROBOTSTXT_CACHEDIR,等等。

內建的配置引用

這裡有一組可用的Scrapy配置項,按照字母表順序排序,並寫出其預設值以及它們的使用範圍。

如果該範圍與任何特定元件相關聯,那麼在可用的情況下,該範圍將顯示使用該配置項的位置。在這種情況下,將顯示該元件的模組,通常是一個擴充套件、中介軟體或管道。它還意味著必須啟動元件,才能使設定生效。

AWS_ACCESS_KEY_ID

預設值:None

AWS(亞馬遜網路服務)訪問關鍵字被用來訪問亞馬遜網路服務,比如S3 feed storage backend

AWS_SECRET_ACCESS_KEY

預設值:None

AWS加密關鍵字被用來訪問亞馬遜網路服務,比如S3 feed storage backend

BOT_NAME

預設值:‘scrapybot’

該Scrapy專案實現的bot的名稱(也稱為專案名稱)。預設情況下,這將被用來構造使用者代理,以及日誌記錄。

當你使用startproject命令建立專案的時候,你的專案名稱將自動填充這個值。

CONCURRENT_ITEMS

預設值:100

在資料項處理器(也稱為資料項管道)中並行處理的併發資料項(每個響應)的最大數目。

CONCURRENT_REQUESTS

預設值:16

Scrapy下載器執行的併發(即同步)請求的最大數目。

CONCURRENT_REQUESTS_PER_DOMAIN

預設值:8

對任何單個域執行的併發(即同步)請求的最大數目。

也可參見:AutoThrottle擴充套件以及它的AUTOTHEROTTLE_TARGET_CONCURRENCY選項。

CONCURRENT_REQUESTS_PER_IP

預設值:0

對任何單個IP執行的併發(即同步)請求的最大數目。如果值為非0,CONCURRENT_REQUESTS_PER_DOMAIN配置項將被忽略,並且使用該值作為替代。一句話,併發限制將應用於每個IP,而不是每個域。

DEFAULT_ITEM_CLASS

預設值:‘scrapy.item.Item’

Scrapy shell中預設用來初始化資料項的類。

DEFAULT_REQUEST_HEADERS

預設值:

{
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'en',
}

用於Scrapy HTTP請求的預設頭。它們在DefaultHeardersMiddleware中被填充。

DEPTH_LIMIT

預設值:0

作用域:scrapy.spidermiddlewares.depth.DepthMiddleware

任何站點允許爬行的最大深度。如果設定為0,則表示沒有任何限制。

DEPTH_PRIORITY

預設值:0

作用域:scrapy.spidermiddlewares.depth.DepthMiddleware

根據深度調整請求優先順序的整數:

  • 如果為0(預設值),不會從深度調整優先順序。
  • 正值將降低優先順序,即更高深度的請求將在稍後處理。這通常用於進行廣度優先爬行(BFO)。
  • 負值將提升優先順序,即更高深度的請求將立馬被處理(DFO)。

也可參見:爬蟲應該是廣度優先還是深度優先?講述了關於Scrapy的BFO或者DFO。

注意:與其他優先順序配置項REDIRECT_PRIORITY_ADJUST和RETRY_PRIORITY_ADJUST相比,該配置項以一種相反的方式在調整優先順序。

DEPTH_STATS

預設值:True

作用域:scrapy.spidermiddlewares.depth.DepthMiddleware

是否蒐集最大深度統計。

DEPTH_STATS_VERBOSE

預設值:False

作用域:scrapy.spidermiddlewares.depth.DepthMiddleware

是否蒐集詳細深度統計資訊。如果啟用此功能,則在統計中搜集每個深度的請求數。

DNSCACHE_ENABLED

預設值:True

是否在記憶體快取中啟動DNS。

DNSCACHE_SIZE

預設值:10000

DNS在記憶體快取中的大小。

DNS_TIMEOUT

預設值:60

DNS查詢處理的超時時長(單位秒)。支援Float型別。

DOWNLOADER

預設值:‘scrapy.core.downloader.Downloader’

用於爬行的下載器。

DOWNLOADER_HTTPCLIENTFACTORY

預設值:‘scrapy.core.downloader.webclient.ScrapyHTTPClientFactory’

定義了一個Twisted的類protocol.ClientFactory,用於HTTP/1.0的連線(HTTP10DownloadHandler)。

注意:HTTP/1.0現在很少使用了,所以你可以安心地忽略這個配置項,除非你使用Twisted<11.1的版本,或者如果你真的想使用HTTP/1.0並相應地為HTTP(s)模式覆蓋DOWNLOAD_HANDLERS_BASE,即’scrapy.core.downloader.handlers.http.HTTP10DownloadHandler’。

DOWNLOADER_CLIENTCONTEXTFACTORY

預設值:‘scrapy.core.downloader.contextfactory.ScrapyClientContextFactory’

代表了要使用的ContextFactory的類路徑。

這裡的“ContextFactory”是一個SSL/TLS上下文的Twisted術語,它定義了要使用的TLS/SSL協議版本,用於進行證書驗證,甚至啟用客戶端身份驗證(以及其他各種功能)。

注意:Scrapy預設的上下文工廠不執行遠端伺服器的證書驗證。這通常用於web抓取。如果你需要開啟遠端伺服器的證書驗證,Scrapy還有另一個上下文工廠類來設定它——‘scrapy.core.downloader.contextfactory.BrowerLikeContextFactory’,使用平臺的證書來驗證遠端終端。這隻有在Twisted>=14.0版本才有用。

如果你使用了一個自定義的ContextFactory,請確保它在init上接受一個method引數(這是OpenSSL.SSL函式對映DOWNLOADER_CLIENT_TLS_METHOD)。

DOWNLOADER_CLEINT_TLS_METHOD

預設值:‘TLS’

使用此配置項自定義預設HTTP/1.1下載器使用的TLS/SSL函式。

這個配置項必須是下面的字串之一:

  • ‘TLS’:對映到OpenSSL的TLS_method()(如你所知的SSLv23_method()),允許協議協商,從平臺支援的最高級別開始;預設推薦此值。
  • ‘TLSv1.0’:該值強制使用HTTPS連線使用TLS版本1.0;如果你想要Scrapy<1.1的行為,請設定這個值。
  • ‘TLSv1.1’:強制TLS版本1.1。
  • ‘TLSv1.2’:強制TLS版本1.2。
  • ‘SSLv3’:強制SSL版本3(不推薦)。

注意:我們推薦你使用PyOpenSSL>=0.13版本和Twisted>=0.13或以上版本(如果你願意,可使用Twisted>14.0版本)。

DOWNLOADER_MIDDLEWARES

預設值:{}

一個包含了你的專案中啟用的下載器中介軟體的字典,並且儲存了這些下載器中介軟體的順序。更多細節請檢視啟用下載器中介軟體

DOWNLOADER_MIDDLEWARES_BASE

預設值:

{
    'scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware': 100,
    'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware': 300,
    'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware': 350,
    'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware': 400,
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 500,
    'scrapy.downloadermiddlewares.retry.RetryMiddleware': 550,
    'scrapy.downloadermiddlewares.ajaxcrawl.AjaxCrawlMiddleware': 560,
    '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.stats.DownloaderStats': 850,
    'scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware': 900,
}

一個包含了你的專案中預設啟用的下載器中介軟體的字典。低順序的更靠近引擎,高順序的更靠近下載器。你不應該在你的專案中修改這個配置項,而是修改DOWNLOADER_MIDDLEWARES。更多細節請檢視啟用下載器中介軟體

DOWNLOADER_STATS

預設值:True

是否啟動收集下載器的統計資訊。

DOWNLOAD_DELAY

預設值:0

下載器在從同一個網站下載連續頁面之前等待的時間(單位秒)。這將被用來限制爬行速度,以避免對伺服器的訪問太頻繁。支援Decimal數值。例如:

DOWNLOAD_DELAY = 0.25  # 延遲250毫秒

這個配置項也受RANDOMIZE_DOWNLOAD_DELAY配置項(預設是開啟的)的影響。預設情況下,Scrapy在請求之間不會等待一個固定時間,而是使用一個隨機值,這個隨機值在0.5 * DOWNLOAD_DELAY和1.5 * DOWNLOAD_DELAY之間。

當CONCURRENT_REQUESTS_PER_IP是一個非0值,延遲是按照IP地址執行的,而不是按域執行。

DOWNLOAD_HANDLERS

預設值:{}

一個包含了你的專案中啟動的請求下載器的處理程式的字典。參見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',
    'ftp': 'scrapy.core.downloader.handlers.ftp.FTPDownloadHandler',
}

一個包含了你的專案中預設啟動的請求下載器的處理程式的字典。你不應該在你的專案中修改這個配置項,而應該修改DOWNLOAD_HANDLERS配置項。

你可以在DOWNLOAD_HANDLERS中將URL模式對應的值設定為None,這樣可以禁用對應的下載器處理程式。比如,為了禁用內建的FTP處理程式,你可以在你的settings.py中這樣寫:

DOWNLOAD_HANDLERS = {
	'ftp': None,
}

DOWNLOAD_TIMEOUT

預設值:180

下載器的最大超時等待時長(單位秒)

注意:這裡的超時可以通過每個爬蟲的download_timeout屬性來設定,也可以通過每個請求的Request.meta關鍵字download_timeout來設定。

DOWNLOAD_MAXSIZE

預設值:1073741824(1024MB)

下載器允許下載的響應最大size(單位位元組)

如果你希望禁用它,則設定為0。

注意:這裡的size可以通過每個爬蟲的download_maxsize屬性來設定,也可以通過每個請求的Request.meta關鍵字download_maxsize來設定。這個特性需要Twisted>=11.1的版本。

DOWNLOAD_WARNSIZE

預設值:33554432(32MB)

下載器開始報警的響應size(單位位元組)

如果你想禁用它,則設定為0。

注意:這個size可以通過每個爬蟲的download_warnsize屬性來設定,也可以通過每個請求的Request.meta關鍵字download_warnsize來設定。這個特性需要Twisted>=11.1的版本。

DOWNLOAD_FAIL_ON_DATALOSS

預設值:True

是否在中斷的響應上失敗,即宣告的Content-Length與伺服器傳送的內容不匹配,或者分塊響應未能正確完成。如果設定為True,這些響應將丟擲一個ResponseFailed([_DataLoss])的錯誤。如果設定為False,這些響應將可以進行傳遞,並且這些響應的屬性flag將會填充值dataloss,比如:‘dataloss’ in response.flag返回True。

另外,這個配置項可以通過每個請求的Request.meta關鍵字download_fail_on_dataloss來設定為False。

注意:在一些情況下,從伺服器錯誤配置到網路錯誤,再到資料損壞,可能會出現響應中斷或者資料丟失錯誤。考慮到中斷的響應可能包含部分或不完整的內,由使用者決定處理這些響應是否有意義。如果RETRY_ENABLED為True,並且該配置項配置為True,則會像往常一樣重試ResponseFailed([_DataLoss])失敗。

DUPEFILTER_CLASS

預設值:‘scrapy.dupefilters.RFPDupeFilter’

這個類用來發現和篩選重複的請求。

預設篩選器(RFPDupeFilter)基於請求的fingerprint使用scrapy.utils.request.request_fingerprint方法。為了改變重複檢查的方式,你可以子類化RFPDupeFilter並重寫它的request_fingerprint函式。這個函式應該接收scrapy的Request物件並返回它的fingerprint(一個字串)。

你可以將DUPEFILTER_CLASS設定為’scrapy.dupefilters.BaseDupeFilter’來禁止過濾重複的請求。需要小心使用此方式,因為你可能會因此掉入一個爬行迴圈中。通常更好的方法是,在不應該被過濾的Request物件上設定dont_filter引數為True。

DUPEFILTER_DEBUG

預設值:False

預設情況下,RFPDupeFilter僅記錄第一個重複的請求。設定DUPEFILTER_DEBUG為True將記錄所有重複的請求。

EDITOR

預設值:vi(在Unix系統)或者IDLE編輯器(在Windows)

edit命令召喚出來的編輯爬蟲的編輯器。此外,如果設定了EDITOR環境變數,那麼edit命令將使用這個環境變數的值來覆蓋預設配置項。

EXTENSIONS

預設值:{}

一個字典,包含了專案中啟動了的、有序的擴充套件。

EXTENSIONS_BASE

預設值:

{
    'scrapy.extensions.corestats.CoreStats': 0,
    'scrapy.extensions.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,
}

一個字典,包含了專案中啟動了的、有序的且預設的擴充套件。這個配置項包含了所有標準的內建擴充套件。請記住,其中一些需要通過配置來開啟。

更多資訊請見擴充套件一文和可用的擴充套件列表一文。

FEED_TEMPDIR

一個臨時資料夾,在使用FTP feed storageAmazon S3上傳之前,設定的一個自定義資料夾來儲存爬行器的臨時檔案。

FTP_PASSIVE_MODE

預設值:True

當初始化FTP傳輸器時,是否啟用被動模式。

FTP_PASSWORD

預設值:“guest”

在Request.meta中沒有ftp_password鍵時,使用這個配置項的值作為FTP連線的密碼。

注意:釋義RFC 1635,儘管對於匿名FTP來說,通常使用“guest”密碼或者電子郵件地址,但一些FTP伺服器明確要求使用使用者的電子郵件地址,而不允許使用“guest”密碼登入。

FTP_USER

預設值:“anonymous”

在Request.meta中沒有ftp_user鍵時,使用這個配置項的值作為FTP連線的賬戶。

ITEM_PIPELINES

預設值:{}

一個包含了帶順序的資料項管道的字典。順序值是任意的,在0-1000範圍內。先處理低順序值的,再處理高順序值的。

示例:

ITEM_PIPELINES = {
	'mybot.pipelines.validate.ValidateMyItem': 300,
	'mybot.pipelines.validate.StoreMyItem': 800,
}

ITEM_PIPELINES_BASE

預設值:{}

一個包含了預設的,帶順序的資料項管道的字典。你不應該在你的專案中修改此配置項,而是修改ITEM_PIPELIENS配置項。

LOG_ENABLED

預設值:True

是否開啟日誌記錄。

LOG_ENCODING

預設值:‘utf-8’

日誌的編碼。

LOG_FILE

預設值:None

用於輸出日誌的檔名。如果為None,則使用標準的錯誤輸出。

LOG_FORMAT

預設值:’%(asctime)s [%(name)s] %(levelname)s: %(message)s’

日誌訊息的格式。檢視Python日誌文件,瞭解可用佔位符的列表。

LOG_DATEFORMAT

預設值:’%Y-%m-%d %H:%M:%S’

日期/時間的字串格式,解釋了LOG_FORMAT中的%(asctime)s佔位符。檢視Python時間文件,瞭解可用表達符的列表。

LOG_LEVEL

預設值:‘DEBUG’

日誌記錄的最小等級。可用等級:CRITICAL,ERROR,WARNING,INFO,DEBUG。更多資訊請看記錄日誌

LOG_STDOUT

預設值:False

如果為True,你的處理流程中所有標準輸出(包括錯誤輸出)將被重定向到日誌系統。舉例來說,print(‘hello’)將出現在Scrapy的日誌中。

LOG_SHORT_NAMES

預設值:False

如果為True,這個日誌僅包含根路徑。如果設定為False,則會顯示負責日誌輸出的元件。

MEMDEBUG_ENABLED

預設值:False

是否開啟記憶體除錯。

MEMDEBUG_NOTIFY

預設值:[]

當開啟了記憶體除錯,且這個配置項不為空,則會將一個記憶體報告發送給指定的地址,否則這個記憶體報告會寫到日誌中。

示例:

MEMDEBUG_NOTIFY = ['[email protected]']

MEMUSAGE_ENABLED

預設值:True

作用域:scrapy.extensions.memusage

是否啟用記憶體使用擴充套件。這個擴充套件持續追蹤了程序使用記憶體的峰值(它將其寫入stats)。當程序超過一個記憶體限制(見MEMUSAGE_LIMIT_MB)時,它也可以關閉這個Scrapy程序,並且以電子郵件的形式進行通知(見MEMUSAGE_NOTIFY_MAIL)。

詳情見記憶體使用擴充套件

MEMUSAGE_LIMIT_MB

預設值:0

作用域:scrapy.extensions.memusage

允許Scrapy使用記憶體的最大數量(單位MB),超過這個值則關閉Scrapy(如果MEMUSAGE_ENABLED為True)。如果該配置項的值為0,則不會執行任何檢查。

詳情見記憶體使用擴充套件

MEMUSAGE_CHECK_INTERVAL_SECONDS

新增於版本1.1。

預設值:60.0

作用域:scrapy.extensions.memusage

記憶體使用擴充套件在固定的時間間隔內檢查當前記憶體的使用情況——通過對比MEMUSAGE_LIMIT_MB和MEMUSAGE_WARNING_MB的值來檢查。

該配置項則是設定這個時間間隔,單位為秒。

詳情見記憶體使用擴充套件

MEMUSAGE_NOTIFY_MAIL

預設值:False

作用域:scrapy.extensions.memusage

一組電子郵件列表,當記憶體使用超過限制時使用。

示例:

MEMUSAGE_NOTIFY_MAIL = ['[email protected]']

詳情見記憶體使用擴充套件

MEMUSAGE_WARNING_MB

預設值:0

作用域:scrapy.extensions.memusage

在傳送一個告警郵件之前允許的最大記憶體容量(單位MB)。如果該配置項的值為0,則不會產生告警。

NEWSPIDER_MODULE

預設值:’’

使用genspider命令時建立爬蟲的模組。

示例:

NEWSPIDER_MODULE = 'mybot.spiders_dev'

RANDOMIZE_DOWNLOAD_DELAY

預設值:True

如果開啟,在從同一個站點獲取請求時,Scrapy將等待一個隨機時間(在0.5 * DOWNLOAD_DELAY和1.5 * DOWNLOAD_DELAY之間)。

這種隨機化降低了爬行器被分析請求的站點檢測到(然後被阻塞)的機率,這些站點分析請求,在請求之間尋找統計上顯著的時間相似性。

這個隨機化策略與wget --random-wait選項相同。

如果DOWNLOAD_DELAY為0(預設值),這個配置項沒有任何效果。

REACTOR_THREADPOOL_MAXSIZE

預設值:10

Twisted Reactor執行緒池大小的最大限制。這是各種Scrapy元件使用的通用的多用途執行緒池。Threaded DNS Resolver,BlockingFeedStorage,S3FilesStore等等。如果你遇到阻塞IO不足的問題,請增加這個值的大小。

REDIRECT_MAX_TIMES

預設值:20

一個請求可以被重定向的最大次數。在這個最大次數後,請求的響應將按原樣返回。這裡我們使用的值與Firefox的預設值一致。

REDIRECT_PRIORITY_ADJUST

預設值:+2

作用域:scrapy.downloadermiddlewares.redirect.RedirectMiddleware

相對於原始請求,調整重定向請求優先順序:

  • 一個正值優先順序調整(預設)表示擁有更高的優先順序。
  • 一個負值優先順序調整表示擁有耕地的優先順序。

RETRY_PRIORITY_ADJUST

預設值:-1

作用域:scrapy.downloadermiddlewares.RetryMiddleware

相對於原始請求,調整重試請求的優先順序:

  • 一個正值優先順序調整表示擁有更高的優先順序。
  • 一個負值優先順序調整(預設)表示擁有更低的優先順序。

ROBOTSTXT_OBEY

預設值:False

作用域:scrapy.downloadermiddlewares.robotstxt

如果開啟,Scrapy將遵守robos.txt的策略。更多資訊請見RobotsTxtMiddleware

注意:雖然由於歷史的原因,預設值為False,但如果使用scrapy startproject命令建立的工程,在settings.py檔案中這個配置項預設是為True的。

SCHEDULER

預設值:‘scrapy.core.scheduler.Scheduler’

用來爬行的排程器。

SCEHDULER_DEBUG

預設值:False

設定為True,則會記錄請求排程器的除錯資訊。如果無法將請求序列化到磁碟,則當前日誌記錄(僅一次)。Stats計數器(排程器/不可序列化)跟蹤發生這種情況的次數。

日誌中的示例:

1956-01-31 00:00:00+0800 [scrapy.core.scheduler] ERROR: Unable to serialize request:
<GET http://example.com> - reason: cannot serialize <Request at 0x9a7c7ec>
(type Request)> - no more unserializable requests will be logged
(see 'scheduler/unserializable' stats counter)

SCEHDULER_DISK_QUEUE

預設值:‘scrapy.squeues.PickleLifoDiskQueue’

排程器將使用的磁碟佇列的型別。其他可用型別有scrapy.squeues.PickleFifoDiskQueue,scrapy.squeues.MarshalFifoDiskQueue,scrapy.squeues.MarshalLifoDiskQueue。

SCHEDULER_MEMORY_QUEUE

預設值:‘scrapy.squeues.LifoMemoryQueue’

排程器使用的記憶體佇列的型別。其他可用型別有scrapy.squeues.FifoMemoryQueue。

SCHEDULER_PRIORITY_QUEUE

預設值:‘queuelib.PriorityQueue’

排程器使用的優先順序佇列的型別。

SPIDER_CONTRACTS

預設值:{}

一個包含專案中啟用的爬蟲契約的字典,用來測試爬蟲。更多資訊見爬蟲的契約

SPIDER_CONTRACTS_BASE

預設值:

{
    'scrapy.contracts.default.UrlContract' : 1,
    'scrapy.contracts.default.ReturnsContract': 2,
    'scrapy.contracts.default.ScrapesContract': 3,
}

一個包含專案中啟用的預設爬蟲契約的字典。你不應該更改專案中的這個配置項,而是修改SPIDER_CONTRACTS配置項。更多資訊見爬蟲的契約

你可以在SPIDER_CONTRACTS配置項中,設定契約為None來禁用這個契約。比如,為了禁用內建的ScrapesContract,請在settings.py中鍵入下面內容:

SPIDER_CONTRACTS = {
	'scrapy.contracts.default.ScrapesContract': None,
}

SPIDER_LOADER_CLASS

預設值:‘scrapy.spiderloader.SpiderLoader’

這個類將被用來載入爬蟲,這個類必須實現SpiderLoader API

SPIDER_LOADER_WARN_ONLY

新增於版本1.3.3。

預設值:False

預設情況下,當Scrapy嘗試從SPIDER_MODULES中匯入爬蟲類,如果這裡有任何ImportError異常,那麼它將通知失敗。但是你可以選擇靜默這個異常(通過設定SPIDER_LOADER_WARN_ONLY = True),並且返回一個包含這個異常的簡單警告。

注意:一些Scrapy命令已經在這個配置項為True的環境下執行(也就是說,它們只會發出警告,不會失敗),因為它們實際上並不需要載入爬蟲類來工作:scrapy runspider,scrapy settings,scrapy startproject,scrapy version。

SPIDER_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_MODULES

預設值:[]

一組Scrapy查詢爬蟲的模組。

示例:

SPIDER_MODUES = ['mybot.spiders_prod', 'mybot.spiders_dev']

STATS_CLASS

預設值:‘scrapy.statscollectors.MemoryStatsCollector’

用來收集統計資訊的類,這個類必須實現Stats Collector API

STATS_DUMP

預設值:True

一旦爬蟲完成,將Scrapy統計資訊轉儲(到Scrapy日誌)。

更多資訊見收集統計資訊(Stats Collection)

STATSMAILER_RCPTS

預設值:[](空列表)

在爬蟲完成爬取後傳送Scrapy統計資訊。見StatsMailer。

TELNETCONSOLE_ENABLED

預設值:True

用於指定是否啟用telnet控制檯(如果還啟用了其擴充套件)。

TELNETCONSOLE_PORT

預設值:[6023, 6073]

用於telnet控制檯的埠範圍。如果設定為None或0,則使用動態分配的埠。有關更多資訊,請參閱Telnet控制檯

TEMPLATES_DIR

預設值:Scrapy模組中的templates資料夾

使用startproject命令建立新專案和使用genspider命令建立新爬蟲時查詢模板的目錄。

專案名稱不能與專案子目錄中的自定義檔案或目錄名稱衝突。

URLLENGTH_LIMIT

預設值:2083

作用域:spidermiddlewares.urllength

允許抓取URL的最大URL長度。有關此設定的預設值的更多資訊。請參閱:https://boutell.com/newfaq/misc/urllength.html

USER_AGENT

預設值:“Scrapy/VERSION (+https://scrapy.org)”

爬行時使用的預設使用者代理,除非被覆蓋。

其他更多設定文件

以下設定在其他地方有文件記錄,請檢查每個具體情況,看看如何啟用和使用它們。