Scrapy settings 允许你自定义所有scrapy组件的行为,包括core,extensions,pipelines and spiders本身。
设置的基础结构提供了键-值映射的全局命名空间,代码可以从中获取配置值。设置可以通过不同的机制填充,在下面描述。
设置也是来选择当前活跃scrapy项目的机制(在你有很多的情况下)
For a list of available built-in settings see: Built-in settings reference.
当你使用scrapy时,你要告诉它你要使用那个设置,你可以通过设置环境变量 SCRAPY_SETTINGS_MODULE
这个值应该是python路径语法,例如myproject.settings。注意settings模块应该在python导入搜索路径上。import search path.
settings可以使用不同机制填充,每一个都有不同的优先权,这是从高到低排序
- Command line options (most precedence)
- Settings per-spider
- Project settings module
- Default settings per-command
- Default global settings (less precedence)
填充设置资源是在内部进行。但是可以调用API进行手动处理,See the Settings API topic for reference
These mechanisms are described in more detail below.
通过命令行提供参数优先级最高,会重新其他操作。你可以精确的重写一个或更多设置,使用-s(or --set)命令行操作。
Example:
scrapy crawl myspider -s LOG_FILE=scrapy.log
spider 可以定义他们自己的设置,获得优先权并重写项目。他们可以通过设置custom_settings属性来实现。
class MySpider(scrapy.Spider):
name = 'myspider'
custom_settings = {
'SOME_SETTING': 'some value',
}
项目设置模块是标准的配置文件,大多数自定义的设置就是在这里填充。对于标准scrapy 项目这意味着你要增加或改变设置要在setting.py 文件里。
每一个scrapy 工具命令都有自己默认的设置,这回重写全局默认的设置。这些自定义的命令设置被指定在command类的default_settings属性里。
全局默认值位于scrapy.setting.settings.default_settings模块里,说明参考 Built-in settings reference
在spider中,设置可以通过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())
Note
settings属性放在基本spider类里在spider实例化后,如果你想使用设置在实例化之前(即在spider的 __init__方法),你需要从写from_crawler()方法。
设置可以通过scrapy.crawler.Crawler.settings属性访问。在extensions ,中间件和 item piplines中,这个属性的Crawler 会传递给frem_crawler 方法。
class MyExtension:
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['LOG_ENABLED‘] , 但是通常使用settingsAPI提供的一种方法,提取设置按你想要的格式,避免格式错误。
设置名通常是组件配置的前缀。例如,对虚拟robots.txt扩展的设置名应该是ROBOTSTXT_ENABLED, ROBOTSTXT_OBEY ,ROBOTSTXT_CACHEDIR.
这有可用设置的列表,以字母顺序排序,带有他们默认的值和他们应用的范围。
可用的范围,展示了设置可用的地方,如果与任何特别的组件相连,这种情况下将展示这个组件的模块,通常是扩展,中间件或管道,这也意味着这些组件必须可用才可以让设置生效。
Default: None
需要访问Amazon Web services的代码使用的AWS访问键,例如 S3 feed storage backend.
Default: None
需要访问 Amazon Web services,的AWS密匙,例如 S3 feed storage backend.
Default: None
用于类似S3 存储的端点url,例如Minio or s3.secality
Default: None
如果你想禁用SSL来链接来使用S3 或 类似S3 的存储就使用这个选择,默认使用SSL。
Default: None
验证SSL与S3 或类似S3的存储之间的SSL链接,默认发生SSL的检验。
Default: None
与AWS客户端相关联的区域的名称。
Default: 'scrapybot'
被这个scrapy项目应用的bot名(也是作为项目名)。这个名也会用来日志记录。
It’s automatically populated with your project name when you create your project with the startproject
command.
Default: 100
在并行的item pipelines中同时处理item(每个响应)的最大数量。
Default: 16
scrapy downloader 同时执行(即并发)的请求的最大数量。
Default: 8
对每个单一域名同时执行(即并发)请求的最大数量。
See also: AutoThrottle extension and its AUTOTHROTTLE_TARGET_CONCURRENCY
option.
Default: 0
对任何单一IP同时(即并发)执行请求的最大数量。如果不是0, CONCURRENT_REQUESTS_PER_DOMAIN
设置就被忽略,这个来代替,也就是说是,并发的限制应用到了每个IP,而不是每个域名。
这个设置也影响 DOWNLOAD_DELAY
and AutoThrottle extension:如果CONCURRENT_REQUEST_PER_IP不是0,下载延迟会强制应用到每个IP,而不是域名。
Default: 'scrapy.item.Item'
在scrapy shell中实例化itmes 的类。
Default:
{
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en',
}
scrapy HTTP 请求的默认请求头。在DefaultHeadersMiddleware
中填充。
Default: 0
Scope: scrapy.spidermiddlewares.depth.DepthMiddleware
对一个网站允许的最大抓取深度,如果是0,就不会加上限制。
Default: 0
Scope: scrapy.spidermiddlewares.depth.DepthMiddleware
一个整数。用来根据请求的深度调整请求的优先级。
请求的优先级按如下调整。
request.priority = request.priority - ( depth * DEPTH_PRIORITY )
随着深度增加,DEPTH_PRIORITY的正值会降低请求优先级(BFO),负值会增加优先级(DFO)。详见 Does Scrapy crawl in breadth-first or depth-first order?。
Note
这个设置调整优先级跟其他优先级设置REDIRECT_PRIORITY_ADJUST
and RETRY_PRIORITY_ADJUST
.相比调整方式是相反的。
Default: False
Scope: scrapy.spidermiddlewares.depth.DepthMiddleware
是否收集冗长的深度统计,如果可用,每个深度请求的数量会收集在统计资料中。
Default: True
是否启用DNS缓存
Default: 10000
DNS缓存大小
New in version 2.0.
Default: 'scrapy.resolver.CachingThreadedResolver'
这个用来解析DNS的名称,默认的scrapy.resolver.CachingThreadedResolver 支持指定的超时DNS请求,通过DNS_TIIMEOUT设置,但是只工作在IPv4 地址。scrapy 提供了一个另类的解析器,scrapy.resolver.CachingHostnameResolver
,支持IPV4/IPV6地址,但是没有考虑DNS_TIMEOUT设置。
Default: 60
处理DNS查询的超时时间,以秒为单位,支持浮点数。
Default: 'scrapy.core.downloader.Downloader'
使用的下载器,
Default: 'scrapy.core.downloader.webclient.ScrapyHTTPClientFactory'
定义一个Twisted protocol.ClientFactory
类,用于HTTP/1.0 链接(对于 HTTP10DownloadHandler)
Note
HTTP/1.0 很少用了,你可以忽略这个设置,除非你想使用HTTP/1.0 并重写相应的http(s)方案,即’scrapy.core.downloader.handlers.http.HTTP10DownloadHandler’
Default: 'scrapy.core.downloader.contextfactory.ScrapyClientContextFactory'
表示ContextFactory使用的类路径。
这里,ContextFactory # 这里的 contextfactory 是对SSL/TLS内容的Twisted 术语,定义了TLS/SSL协议使用的版本,以及是否要进行证书验证或是否启用客户端认证(还有很多其他的)
Note
scrapy 默认的context factory 不会执行远程服务证书认证,这对网络抓取是很好的。
如果你需要启用远程服务证书认证,scrapy也有其他的context factory类你可以设置的,'scrapy.core.downloader.contextfactory.BrowserLikeContextFactory'
,这使用平台的证书来验证远程端点。
如果你使用自定义的ContextFactroy,确保它的__init__ 方法接收一个method 参数(这是OpenSSL.SSL方法映射DOWNLOADER_CLIENT_TLS_METHOD), a tls_verbose_logging
parameter (bool
) and a tls_ciphers
parameter (see DOWNLOADER_CLIENT_TLS_CIPHERS
)
Default: 'DEFAULT'
使用这个设置来定制默认HTTP/1.1下载器使用的TLS/SSL暗号
这个设置应该包含OpenSSL cipher list format格式的字符串,这些暗号将用作客户暗号。改变这个设置是访问某个HTTPS网站而必要的,例如,你可能需要使用 'DEFAULT:!DH'
,在DH参数弱的网站或如果网站需要,启用特别的暗号不包含DEFAULT。
Default: 'TLS'
使用这个设置来自定义默认的HTTP/1.1下载器使用的TLS/SSL方法
这个设置必须是这些字符串值中的一个。
'TLS'
: 映射OpenSSL 的 TLS_method()(也称作SSLv23_method()),允许协商协议,从平台支持的最高协议开始。默认的,推荐的'TLSv1.0'
: 这个值强迫HTTPS连接使用1.0版的TLS;如果你想scrapy的行为小于1.1就设置这个'TLSv1.1'
: forces TLS version 1.1'TLSv1.2'
: forces TLS version 1.2'SSLv3'
: forces SSL version 3 (not recommended) # 不推荐Default: False
设置这个为True,将启用DEBUG级别的消息关于建立HTTPS连接后的TLS连接参数。这种信息加载依靠OpenSSL and pyOpenSSL的版本。
这个设置仅用于默认的DOWNLOADER_CLIENTCONTEXTFACTORY.
Default:: {}
一个字典包含了你的项目中启用的下载器中间件,和他们的命令, For more info see Activating a downloader middleware.
Default:
{
'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,For more info see Activating a downloader middleware
Default: True
是否启用下载器统计信息收集。
Default: 0
在同一个网站下载连续页面时下载器应该等待的时间(秒)。这用来限制抓取的速度避免对服务器造成破坏。支持小数
DOWNLOAD_DELAY = 0.25 # 250 ms of delay
这个设置还受RANDOMIZE_DOMNLOAD_DELAY设置影响(默认时启用的)。默认scrapy 不会等待固定的时间在每个请求间,而是使用一个随机间隔在0.5*DOWNLOAD_DELAY 和 1.5*DOWNLOAD_DELAY之间
CONCURRENT_REQUESTS_PER_IP
不是零时,延迟被强制使用在每个ip地址上而不是每个域名。
你也可以改变每个爬虫的设置通过设置download_delay 爬虫属性。
Default: {}
一个字典包含你的项目中可用的请求下载处理器。See DOWNLOAD_HANDLERS_BASE
for example format.
Default:
{
'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',
}
一个字典包含了scrapy 中默认的请求下载处理程序。不要修改这个设置,而是去修改上面那个。
你可以禁用这些下载处理器通过分配None 给他们的URI 方案在DOWNLOAD_HANDLERS。例如。禁用内置的FTP处理器(不用替换),把这些放到你的settings.py文件中
DOWNLOAD_HANDLERS = {
'ftp': None,
}
Default: 180
在超时前下载器等待的时间(秒)
Note
这个超时可用设置在每个爬虫中使用download_timeout 爬虫属性,并使用 download_timeout
Request.meta key 给每个请求设置超时。
Default: 1073741824
(1024MB)
下载器可以下载的最大相应大小(字节)
If you want to disable it set to 0.
Note
This size can be set per spider using download_maxsize
spider attribute and per-request using download_maxsize
Request.meta key.
Default: 33554432
(32MB)
下载器开始警告的相应大小(字节)
If you want to disable it set to 0.
Note
This size can be set per spider using download_warnsize
spider attribute and per-request using download_warnsize
Request.meta key.
Default: True
是否因破损的相应而失败,就是声明的content_length不能匹配服务器发来的内容,或大块的相应没有正确完成。如果True,这些相应会生成ResponseFailed([_DataLoss])
error. 如果False ,这些相应被传递并且dataloss标准会加到这个相应里。即response.flags里的dataloss=True。
这可以在每个请求里设置,根据使用download_fail_on_dataloss
Request.meta key to False
Note
相应终端或数据丢失错误可能会发生在下面几种情况,从服务器配置错误到网络错误再到数据损坏。这取决于用户是否决定去处理破损的相应,考虑到他们可能包含部分或破损的内容。如果RETRY_ENABLED
is True
and this setting is set to True
,通常 ResponseFailed([_DataLoss])
错误会生成。
Default: 'scrapy.dupefilters.RFPDupeFilter'
这个类用来检测和过滤重复的请求。
默认的基于请求指纹的(RFPDupeFilter)过滤器使用scrapy.utils.request.request_fingerprint
函数。为了改变检测重复项的方式,你可以将RFPDupeFilter
子类化并重写request_fingerprint
method。这个方法应该接受scrapy的Request 对象并返回它的指纹(字符串)
你可以设置 DUPEFILTER_CLASS
to 'scrapy.dupefilters.BaseDupeFilter'
来禁用过滤重复请求。要慎重使用,因为可能会陷入循环抓取,通常设置指定请求的dont_filter 参数为true是个跟好的选择
Default: False
默认 RFPDupeFilter
只会记录第一个重复请求,设置这个为true ,可以记录所有重复请求。
Default: vi
(on Unix systems) or the IDLE editor (on Windows)
使用edit命令编辑爬虫是使用的编辑器。另外如果EDITOR环境变量被设置,edit命令会覆盖默认的
Default:: {}
字典包含了你的项目中可用的扩展,和他们的顺序。
Default:
{
'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,
}
字典包含了scrapy 默认的可用扩展和他们的顺序。这个设置包含了所有的固定内置扩展,记得一些需要通过设置启用。
For more information See the extensions user guide and the list of available extensions.
Feed Temp dir允许你设置一个自定义的文件夹来保存临时抓取的文件,在上载 FTP feed storage and Amazon S3之前。
Default: True
是否使用被动模式在发起FTP传输的时候。
Default: "guest"
FTP连接使用的密码,当Request meta 没有ftp_password时
Note
用RFC 1635解释,即使通常使用密码guest 或一个人的邮件地址用于匿名FTP,但一些FTP服务器明确要求用户的邮箱地址,不允许使用guest 登录。
Default: "anonymous"
FTP连接时使用的用户名,当request meta没有ftp_user时。
Default: {}
字典包含了item pipeline来用,和他们的顺序,其他值是任意的,但是通常在1-1000,低命令优先处理。
Example:
ITEM_PIPELINES = {
'mybot.pipelines.validate.ValidateMyItem': 300,
'mybot.pipelines.validate.StoreMyItem': 800,
}
Default: {}
字典包含了内置的管道,你不要修改这个设置,而是去修改上面那个。
Default: True
Whether to enable logging.# 是否启用日志。
Default: 'utf-8'
日志使用的编码
Default: None
日志输出的文件名,如果是none,就使用标准的错误。
Default: '%(asctime)s [%(name)s] %(levelname)s: %(message)s'
字符串来格式化日志消息。参考 Python logging documentation 获得所有占位符。
Default: '%Y-%m-%d %H:%M:%S'
字符串格式化时间日期的,在LOG_FORMAT中扩展了%(asctime)s
占位符,Refer to the Python datetime documentation for the whole list of available directives
Default: scrapy.logformatter.LogFormatter
类用来使用不同的操作格式化日志消息。 formatting log messages
Default: 'DEBUG'
记录的最小水准,可用的有CRITICAL, ERROR, WARNING, INFO, DEBUG. For more info see Logging.
Default: False
如果是True, 你的过程中所有的标准输出(和错误)都会重定向到日志里,例如,如果你print(‘hello’),他就会出现在scrapy 日志里。
Default: False
如果是True ,日志就仅包含跟路径,如果将其设置为False , 就展示复制日志输出的组件。
Default: 60.0
被logstats统计的每个日志输出的间隔(秒)
Default: False
是否使用内存调试
Default: []
当内存调试可用,一个内存报告就好送给指定的地址,如果这个设置不是空,否则这个报告会写给日志。
Example:
MEMDEBUG_NOTIFY = ['[email protected]']
Default: True
Scope: scrapy.extensions.memusage
是否启用内存用法扩展,这个扩展保持对进程使用的内存峰值的跟踪(将其写入统计信息里)。还可以选择的关闭scrapy进程,当超过内存限制时((see MEMUSAGE_LIMIT_MB
),并且发生时通知邮件(see MEMUSAGE_NOTIFY_MAIL
).
See Memory usage extension.
Default: 0
Scope: scrapy.extensions.memusage
再关闭scrapy时(f MEMUSAGE_ENABLED is True)允许的最大内存(MB)。如果是0,就不执行检测
See Memory usage extension.
New in version 1.1.
Default: 60.0
Scope: scrapy.extensions.memusage
Memory usage extension检测当前的内存用法,与 MEMUSAGE_LIMIT_MB
and MEMUSAGE_WARNING_MB
设置的限制,以固定的时间间隔。
这是设置时间间隔的,秒为单位
See Memory usage extension.
Default: False
Scope: scrapy.extensions.memusage
邮箱的列表,在达到限制时通知。
Example:
MEMUSAGE_NOTIFY_MAIL = ['[email protected]']
See Memory usage extension.
Default: 0
Scope: scrapy.extensions.memusage
在发送警告邮件通知超过的最大内存,如果是0,就不会执行警告。
Default: ''
使用genspider命令创建新爬虫时的模块
Example:
NEWSPIDER_MODULE = 'mybot.spiders_dev'
Default: True
如果可用,scrapy在从同一个网站获取请求时会等待一个随机的时间(between 0.5 * DOWNLOAD_DELAY
and 1.5 * DOWNLOAD_DELAY
)
这种随机化减少了爬虫被检测的机会(然后被阻止),网站会分析请求来找到同时间请求在统计上重要的相似部分。
随机化策略跟 wget --random-wait
的使用的选项相同。
如果是0(默认)这个选项就没用了
Default: 10
Twisted Reactor 线程池最大的限制。这是通用的多用途线程池,被scrapy多个组件使用。线程DNS解析器,BlockingFeedStorage, S3FilesStore 是其中一些的名字。增加这个值,如果遇到因不足造成的IO阻塞
Default: +2
Scope: scrapy.downloadermiddlewares.redirect.RedirectMiddleware
相对于原始请求调整重定向请求的优先级
优先级为正意味着更高的优先级
负就是更低的
Default: -1
Scope: scrapy.downloadermiddlewares.retry.RetryMiddleware
相对于原始请求调整重试请求的优先级
Default: False
Scope: scrapy.downloadermiddlewares.robotstxt
如果启用,scrapy会遵守机器人协议,For more information see RobotsTxtMiddleware.
Note
虽然由于历史原因默认值是False,但默认情况下这个选项在使用scrapy startproject命令生成settings.py文件时是启用的。
Default: 'scrapy.robotstxt.ProtegoRobotParser'
用来解析robots.txt文件的解释器后端,For more information see RobotsTxtMiddleware.
Default: None
在robots.txt文件中用来匹配的user agent 字符串,如果是None,与请求一起发送的请求头或USER_AGENT设置(按此顺序)将用于确定在robots.txt文件使用的用户代理。
Default: 'scrapy.core.scheduler.Scheduler'
抓取时使用的调度器
Default: False
设置这个为True会记录关于请求调度器的调试信息,如果请求不能序列化成磁盘,则当前的日志仅记录一次。统计计数器(可调度/不可序列化)跟踪发生的次数。
Example entry in logs:
1956-01-31 00:00:00+0800 [scrapy.core.scheduler] ERROR: Unable to serialize request:
- reason: cannot serialize
(type Request)> - no more unserializable requests will be logged
(see 'scheduler/unserializable' stats counter)
Default: 'scrapy.squeues.PickleLifoDiskQueue'
调度器使用的磁盘对列的种类,其他可用的有:
Default: 'scrapy.squeues.LifoMemoryQueue'
调度器使用的内存对列的种类,其他可用的有:
Default: 'scrapy.pqueues.ScrapyPriorityQueue'
使用的优先级对列种类。其他可用的有:scrapy.pqueues.DownloaderAwarePriorityQueue
.
scrapy.pqueues.DownloaderAwarePriorityQueue
比默认的更好使当你要平行抓取许多不同域名时,但是当前的scrapy.pqueues.DownloaderAwarePriorityQueue
不能和 CONCURRENT_REQUESTS_PER_IP
一起使用。
New in version 2.0.
Default: 5_000_000
处理的响应数据的软限制(字节单位)
当所有正在处理的请求大小加起来超过了这个限制,scrapy就不会在处理新的请求。
Default:: {}
字典包含了你项目中可用的合同,用来测试爬虫,For more info see Spiders Contracts。
Default:
{
'scrapy.contracts.default.UrlContract' : 1,
'scrapy.contracts.default.ReturnsContract': 2,
'scrapy.contracts.default.ScrapesContract': 3,
}
默认的合约,不要修改这个,修改上面那个,
在SPIDER_CONTRACTS中分配None来禁用这些合约。例如禁用内置的ScrapesContract
,在settings.py中。
SPIDER_CONTRACTS = {
'scrapy.contracts.default.ScrapesContract': None,
}
Default: 'scrapy.spiderloader.SpiderLoader'
用来加载爬虫的类,必须实现SpiderLoader API.
New in version 1.3.3.
Default: False
默认,当scrapy尝试从 SPIDER_MODULES
导入爬虫类时,如果出现任何ImportError
例外会强烈报错,,,但是你可以选择安静这个例外并改变成一个单一的警告,通过设置为True。
Note
一些scrapy 命令已经已经是这个设置为True了(即只会对问题警告而不是报错)因为他们不用加载爬虫类 scrapy runspider
, scrapy settings
, scrapy startproject
, scrapy version
.
Default:: {}
字典包含你的项目可用的中间件,和他们的顺序For more info see Activating a spider middleware.
Default:
{
'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,
}
默认中间件和他们的顺序,低顺序靠近引擎,高的靠近爬虫。
Default: []
在这里scrapy寻找爬虫的模块列表
Example:
SPIDER_MODULES = ['mybot.spiders_prod', 'mybot.spiders_dev']
Default: 'scrapy.statscollectors.MemoryStatsCollector'
用来收集统计信息的类,必须实现 Stats Collector API.
Default: True
将scrapy统计信息保存到scrapy日志里,一旦爬虫完成了
For more info see: Stats Collection.
Default: []
(empty list)
爬虫完成抓取后发送scrapy统计信息。See StatsMailer
for more info。
Default: True
布尔值指定telnet console是否启用(提供他的扩展也启用)
Default: templates
dir inside scrapy module
在使用startproject and genspider命令时寻找的范本目录。
项目名必须和传统文件或在project子目录的目录名不冲突
New in version 2.0.
Default: None
所给的reactor
的导入路径
如果没有其他的reactor已经下载了,scrapy会下载这个reactor,例如当调用scrapy CLI程序时或使用CrawlerProcess类时。
如果你正在使用crawlerrunner类时,你也需要手动下载正确的reactor。你可以使用install_reactor()
来完成
scrapy.utils.reactor.install_reactor
(reactor_path)[source]用指定的路径下载reactor。
如果已经下载好了,这个就没用了。
如果下载的reactor没有匹配TWISTED_REACTOR
设置CrawlerRunner.__init__
就会生成报错,因此,有顶级reacotr导入项目文件和导入第三方库时,在scrapy检查下载了那个reactor时会引发报错。
为了使用scrapy下载的reactor。
import scrapy
from twisted.internet import reactor
class QuotesSpider(scrapy.Spider):
name = 'quotes'
def __init__(self, *args, **kwargs):
self.timeout = int(kwargs.pop('timeout', '60'))
super(QuotesSpider, self).__init__(*args, **kwargs)
def start_requests(self):
reactor.callLater(self.timeout, self.stop)
urls = ['http://quotes.toscrape.com/page/1']
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
for quote in response.css('div.quote'):
yield {'text': quote.css('span.text::text').get()}
def stop(self):
self.crawler.engine.close_spider(self, 'timeout')
which raises Exception
, becomes:
import scrapy
class QuotesSpider(scrapy.Spider):
name = 'quotes'
def __init__(self, *args, **kwargs):
self.timeout = int(kwargs.pop('timeout', '60'))
super(QuotesSpider, self).__init__(*args, **kwargs)
def start_requests(self):
from twisted.internet import reactor
reactor.callLater(self.timeout, self.stop)
urls = ['http://quotes.toscrape.com/page/1']
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
for quote in response.css('div.quote'):
yield {'text': quote.css('span.text::text').get()}
def stop(self):
self.crawler.engine.close_spider(self, 'timeout')
std-setting-TWISTED_REACTOR) 设置默认时none,也就是不会下载任何指定的reactor,并且使用twisted为当前平台指定的默认的reacotr,这是为了保留向后兼容性,并且避免使用非默认的reacotr可能的错误。
For additional information, see Choosing a Reactor and GUI Toolkit Integration.
Default: 2083
Scope: spidermiddlewares.urllength
允许榨取的最大URL长度,更多信息参考 https://boutell.com/newfaq/misc/urllength.html
Default: "Scrapy/VERSION (+https://scrapy.org)"
抓取时使用的默认user-agent,除非被重写了,如果 ROBOTSTXT_USER_AGENT
设置是none并且没有为请求指定user-agent头, RobotsTxtMiddleware
也会用这个。
以下都记录在别的地方,请检查每个的例子来了解怎样启用和使用他们。