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)”

爬行时使用的默认用户代理,除非被覆盖。

其他更多设置文档

以下设置在其他地方有文档记录,请检查每个具体情况,看看如何启用和使用它们。

猜你喜欢

转载自blog.csdn.net/ReganDu/article/details/85778688