设置¶
Scrapy 设置允许您自定义所有 Scrapy 组件的行为,包括核心、扩展、管道和爬虫本身。
设置的基础架构提供了一个键值映射的全局命名空间,代码可以使用它来从中提取配置值。设置可以通过不同的机制填充,如下所述。
设置也是选择当前活动 Scrapy 项目(如果您有多个)的机制。
有关可用内置设置的列表,请参阅:内置设置参考。
指定设置¶
当您使用 Scrapy 时,您必须告诉它您正在使用哪些设置。您可以通过使用环境变量 SCRAPY_SETTINGS_MODULE
来做到这一点。
SCRAPY_SETTINGS_MODULE
的值应采用 Python 路径语法,例如 myproject.settings
。请注意,设置模块应位于 Python 的 导入搜索路径 上。
填充设置¶
设置可以使用不同的机制填充,每个机制都有不同的优先级。以下是按优先级递减顺序排列的列表
命令行选项(最高优先级)
每个爬虫的设置
项目设置模块
插件设置的设置
每个命令的默认设置
默认全局设置(最低优先级)
这些设置源的填充是在内部完成的,但可以使用 API 调用进行手动处理。有关参考,请参阅 设置 API 主题。
下面将详细介绍这些机制。
1. 命令行选项¶
命令行提供的参数是优先级最高的参数,会覆盖任何其他选项。您可以使用 -s
(或 --set
)命令行选项显式覆盖一个(或多个)设置。
示例
scrapy crawl myspider -s LOG_FILE=scrapy.log
2. 每个爬虫的设置¶
爬虫(有关参考,请参阅 爬虫 章节)可以定义自己的设置,这些设置将具有优先级并覆盖项目设置。一种方法是设置其 custom_settings
属性
import scrapy
class MySpider(scrapy.Spider):
name = "myspider"
custom_settings = {
"SOME_SETTING": "some value",
}
通常最好实现 update_settings()
,并且在那里设置的设置应明确使用“spider”优先级
import scrapy
class MySpider(scrapy.Spider):
name = "myspider"
@classmethod
def update_settings(cls, settings):
super().update_settings(settings)
settings.set("SOME_SETTING", "some value", priority="spider")
版本 2.11 中的新功能。
也可以在 from_crawler()
方法中修改设置,例如基于 爬虫参数 或其他逻辑
import scrapy
class MySpider(scrapy.Spider):
name = "myspider"
@classmethod
def from_crawler(cls, crawler, *args, **kwargs):
spider = super().from_crawler(crawler, *args, **kwargs)
if "some_argument" in kwargs:
spider.settings.set(
"SOME_SETTING", kwargs["some_argument"], priority="spider"
)
return spider
3. 项目设置模块¶
项目设置模块是 Scrapy 项目的标准配置文件,大多数自定义设置都将在此处填充。对于标准的 Scrapy 项目,这意味着您将在为项目创建的 settings.py
文件中添加或更改设置。
4. 插件设置的设置¶
插件 可以修改设置。他们应该以这种优先级这样做,尽管这不是强制性的。
5. 每个命令的默认设置¶
每个 Scrapy 工具 命令都可以有自己的默认设置,这些设置会覆盖全局默认设置。这些自定义命令设置在命令类的 default_settings
属性中指定。
6. 默认全局设置¶
全局默认值位于 scrapy.settings.default_settings
模块中,并在 内置设置参考 部分进行了记录。
与 pickle 的兼容性¶
设置值必须是 可 pickle 化的。
导入路径和类¶
版本 2.4.0 中的新功能。
当某个设置引用一个要由 Scrapy 导入的可调用对象(例如类或函数)时,您可以通过两种不同的方式指定该对象
作为包含该对象导入路径的字符串
作为对象本身
例如
from mybot.pipelines.validate import ValidateMyItem
ITEM_PIPELINES = {
# passing the classname...
ValidateMyItem: 300,
# ...equals passing the class path
"mybot.pipelines.validate.ValidateMyItem": 300,
}
注意
不支持传递不可调用对象。
如何访问设置¶
在爬虫中,设置可以通过 self.settings
访问
class MySpider(scrapy.Spider):
name = "myspider"
start_urls = ["http://example.com"]
def parse(self, response):
print(f"Existing settings: {self.settings.attributes.keys()}")
注意
在爬虫初始化后,settings
属性在基类 Spider 中设置。如果您想在初始化之前使用设置(例如,在爬虫的 __init__()
方法中),则需要覆盖 from_crawler()
方法。
设置可以通过传递给扩展、中间件和项目管道的 from_crawler
方法的 Crawler 的 scrapy.crawler.Crawler.settings
属性访问
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']
),但通常建议使用 Settings
API 提供的方法,以所需的格式提取设置,从而避免类型错误。
设置名称的理由¶
设置名称通常以其配置的组件作为前缀。例如,一个虚构的 robots.txt 扩展程序的正确设置名称将是 ROBOTSTXT_ENABLED
、ROBOTSTXT_OBEY
、ROBOTSTXT_CACHEDIR
等。
内置设置参考¶
以下是所有可用的 Scrapy 设置的列表,按字母顺序排列,以及它们的默认值和适用范围。
在适用情况下,范围显示设置的使用位置,如果它与任何特定组件相关联。在这种情况下,将显示该组件的模块,通常是扩展、中间件或管道。这也意味着必须启用该组件才能使设置生效。
附加组件¶
默认值:{}
一个字典,包含项目中启用的附加组件的路径及其优先级。有关更多信息,请参见 附加组件。
AWS_ACCESS_KEY_ID¶
默认值:None
由需要访问 Amazon Web 服务 的代码(例如 S3 Feed 存储后端)使用的 AWS 访问密钥。
AWS_SECRET_ACCESS_KEY¶
默认值:None
由需要访问 Amazon Web 服务 的代码(例如 S3 Feed 存储后端)使用的 AWS 密钥。
AWS_SESSION_TOKEN¶
默认值:None
由需要访问 Amazon Web 服务 的代码(例如 S3 Feed 存储后端)在使用 临时安全凭证 时使用的 AWS 安全令牌。
AWS_ENDPOINT_URL¶
默认值:None
用于类似 S3 的存储的端点 URL,例如 Minio 或 s3.scality。
AWS_USE_SSL¶
默认值:None
如果您想禁用与 S3 或类似 S3 的存储的通信的 SSL 连接,请使用此选项。默认情况下将使用 SSL。
AWS_VERIFY¶
默认值:None
验证 Scrapy 和 S3 或类似 S3 的存储之间的 SSL 连接。默认情况下将进行 SSL 验证。
AWS_REGION_NAME¶
默认值:None
与 AWS 客户端关联的区域的名称。
ASYNCIO_EVENT_LOOP¶
默认值:None
给定 asyncio
事件循环类的导入路径。
如果启用了 asyncio reactor(请参见 TWISTED_REACTOR
),则此设置可用于指定要与其一起使用的 asyncio 事件循环。将设置设置为所需 asyncio 事件循环类的导入路径。如果将设置设置为 None
,则将使用默认的 asyncio 事件循环。
如果您使用 install_reactor()
函数手动安装 asyncio reactor,则可以使用 event_loop_path
参数指示要使用的事件循环类的导入路径。
请注意,事件循环类必须继承自 asyncio.AbstractEventLoop
。
注意
请注意,当使用非默认事件循环(通过 ASYNCIO_EVENT_LOOP
定义或使用 install_reactor()
安装)时,Scrapy 将调用 asyncio.set_event_loop()
,这将为当前操作系统线程设置指定的事件循环作为当前循环。
BOT_NAME¶
默认值:'scrapybot'
此 Scrapy 项目实现的机器人的名称(也称为项目名称)。此名称也将用于日志记录。
当您使用 startproject
命令创建项目时,它会自动填充您的项目名称。
CONCURRENT_ITEMS¶
默认值:100
在 项目管道 中并行处理的并发项目(每个响应)的最大数量。
CONCURRENT_REQUESTS¶
默认值:16
Scrapy 下载器将执行的最大并发(即同时)请求数。
CONCURRENT_REQUESTS_PER_DOMAIN¶
默认值:8
将对任何单个域执行的最大并发(即同时)请求数。
另请参见:自动节流扩展及其 AUTOTHROTTLE_TARGET_CONCURRENCY
选项。
CONCURRENT_REQUESTS_PER_IP¶
默认值:0
将对任何单个 IP 执行的最大并发(即同时)请求数。如果非零,则忽略 CONCURRENT_REQUESTS_PER_DOMAIN
设置,而使用此设置。换句话说,并发限制将按 IP 应用,而不是按域应用。
此设置还会影响 DOWNLOAD_DELAY
和 自动节流扩展:如果 CONCURRENT_REQUESTS_PER_IP
非零,则下载延迟按 IP 强制执行,而不是按域强制执行。
DEFAULT_ITEM_CLASS¶
默认值:'scrapy.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 请求的默认标头。它们在 DefaultHeadersMiddleware
中填充。
注意
通过 Cookie
标头设置的 Cookie 不会被 Cookies 中间件 考虑。如果您需要为请求设置 Cookie,请使用 Request.cookies
参数。这是一个已知的当前限制,正在努力解决。
DEPTH_LIMIT¶
默认值:0
范围:scrapy.spidermiddlewares.depth.DepthMiddleware
允许对任何站点爬取的最大深度。如果为零,则不会施加任何限制。
DEPTH_PRIORITY¶
默认值:0
范围:scrapy.spidermiddlewares.depth.DepthMiddleware
一个整数,用于根据其深度调整 Request
的 priority
。
请求的优先级如下调整
request.priority = request.priority - (depth * DEPTH_PRIORITY)
随着深度的增加,DEPTH_PRIORITY
的正值降低请求优先级 (BFO),而负值增加请求优先级 (DFO)。另请参见 Scrapy 是以广度优先还是深度优先的顺序爬取?。
注意
此设置以相反的方式调整优先级,与其他优先级设置 REDIRECT_PRIORITY_ADJUST
和 RETRY_PRIORITY_ADJUST
相比。
DEPTH_STATS_VERBOSE¶
默认值:False
范围:scrapy.spidermiddlewares.depth.DepthMiddleware
是否收集详细的深度统计信息。如果启用此选项,则将在统计信息中收集每个深度的请求数。
DNSCACHE_ENABLED¶
默认值:True
是否启用 DNS 内存缓存。
DNSCACHE_SIZE¶
默认值:10000
DNS 内存缓存大小。
DNS_RESOLVER¶
版本 2.0 中新增。
默认值:'scrapy.resolver.CachingThreadedResolver'
用于解析 DNS 名称的类。默认的 scrapy.resolver.CachingThreadedResolver
支持通过 DNS_TIMEOUT
设置指定 DNS 请求的超时时间,但仅适用于 IPv4 地址。Scrapy 提供了一个备用解析器 scrapy.resolver.CachingHostnameResolver
,它支持 IPv4/IPv6 地址,但不考虑 DNS_TIMEOUT
设置。
DNS_TIMEOUT¶
默认值:60
DNS 查询处理的超时时间(秒)。支持浮点数。
DOWNLOADER¶
默认值:'scrapy.core.downloader.Downloader'
用于爬取的下载器。
DOWNLOADER_HTTPCLIENTFACTORY¶
默认值:'scrapy.core.downloader.webclient.ScrapyHTTPClientFactory'
定义一个 Twisted protocol.ClientFactory
类,用于 HTTP/1.0 连接(适用于 HTTP10DownloadHandler
)。
注意
如今 HTTP/1.0 很少使用,因此您可以安全地忽略此设置,除非您确实想使用 HTTP/1.0 并相应地覆盖 DOWNLOAD_HANDLERS
以匹配 http(s)
方案,例如,设置为 'scrapy.core.downloader.handlers.http.HTTP10DownloadHandler'
。
DOWNLOADER_CLIENTCONTEXTFACTORY¶
默认值:'scrapy.core.downloader.contextfactory.ScrapyClientContextFactory'
表示要使用的 ContextFactory 的类路径。
这里,“ContextFactory” 是 Twisted 中用于 SSL/TLS 上下文的术语,它定义了要使用的 TLS/SSL 协议版本,是否执行证书验证,甚至启用客户端身份验证(以及其他各种内容)。
注意
Scrapy 默认的上下文工厂**不执行远程服务器证书验证**。这对于网页抓取通常是可以的。
如果您确实需要启用远程服务器证书验证,Scrapy 还提供另一个可以设置的上下文工厂类,'scrapy.core.downloader.contextfactory.BrowserLikeContextFactory'
,它使用平台的证书来验证远程端点。
如果您确实使用了自定义的 ContextFactory,请确保其 __init__
方法接受 method
参数(这是 OpenSSL.SSL
方法映射 DOWNLOADER_CLIENT_TLS_METHOD
),tls_verbose_logging
参数(bool
)和 tls_ciphers
参数(参见 DOWNLOADER_CLIENT_TLS_CIPHERS
)。
DOWNLOADER_CLIENT_TLS_CIPHERS¶
默认值:'DEFAULT'
使用此设置来自定义默认 HTTP/1.1 下载器使用的 TLS/SSL 密码。
此设置应包含一个 OpenSSL 密码列表格式 的字符串,这些密码将用作客户端密码。更改此设置可能是访问某些 HTTPS 网站所必需的:例如,您可能需要为具有弱 DH 参数的网站使用 'DEFAULT:!DH'
,或者如果网站需要,则启用 DEFAULT
中未包含的特定密码。
DOWNLOADER_CLIENT_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
DOWNLOADER_CLIENT_TLS_VERBOSE_LOGGING¶
默认值:False
将此设置为 True
将在建立 HTTPS 连接后启用有关 TLS 连接参数的 DEBUG 级别的消息。记录的信息类型取决于 OpenSSL 和 pyOpenSSL 的版本。
此设置仅适用于默认的 DOWNLOADER_CLIENTCONTEXTFACTORY
。
DOWNLOADER_MIDDLEWARES¶
默认值:: {}
一个字典,包含在您的项目中启用的下载器中间件及其顺序。有关更多信息,请参见 激活下载器中间件。
DOWNLOADER_MIDDLEWARES_BASE¶
默认值
{
"scrapy.downloadermiddlewares.offsite.OffsiteMiddleware": 50,
"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,
}
一个字典,包含 Scrapy 中默认启用的下载器中间件。较低的顺序更靠近引擎,较高的顺序更靠近下载器。您永远不应该在您的项目中修改此设置,请修改 DOWNLOADER_MIDDLEWARES
。有关更多信息,请参见 激活下载器中间件。
DOWNLOADER_STATS¶
默认值:True
是否启用下载器统计信息收集。
DOWNLOAD_DELAY¶
默认值:0
在对同一域名发出两个连续请求之间等待的最小秒数。
使用 DOWNLOAD_DELAY
来限制您的爬取速度,以避免对服务器造成过大的压力。
支持小数。例如,每 10 秒最多发送 4 个请求
DOWNLOAD_DELAY = 2.5
此设置还会受到 RANDOMIZE_DOWNLOAD_DELAY
设置的影响,该设置默认启用。
当 CONCURRENT_REQUESTS_PER_IP
不为零时,延迟将按 IP 地址而不是按域名执行。
请注意,DOWNLOAD_DELAY
可以将有效的每个域名的并发性降低到低于 CONCURRENT_REQUESTS_PER_DOMAIN
。如果域名的响应时间低于 DOWNLOAD_DELAY
,则该域名的有效并发性为 1。在测试限流配置时,通常有意义的是先降低 CONCURRENT_REQUESTS_PER_DOMAIN
,只有在 CONCURRENT_REQUESTS_PER_DOMAIN
为 1 但需要更高的限流时才增加 DOWNLOAD_DELAY
。
注意
此延迟可以使用 download_delay
蜘蛛属性为每个蜘蛛设置。
也可以为每个域名更改此设置,尽管这需要非平凡的代码。请参阅 自动限流 扩展的实现以获取示例。
DOWNLOAD_HANDLERS¶
默认值:{}
一个字典,包含在您的项目中启用的请求下载器处理程序。请参阅 DOWNLOAD_HANDLERS_BASE
以了解示例格式。
DOWNLOAD_HANDLERS_BASE¶
默认值
{
"data": "scrapy.core.downloader.handlers.datauri.DataURIDownloadHandler",
"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 中默认启用的请求下载处理程序。您永远不应该在您的项目中修改此设置,请修改 DOWNLOAD_HANDLERS
。
您可以通过在 DOWNLOAD_HANDLERS
中将其 URI 方案分配为 None
来禁用任何这些下载处理程序。例如,要禁用内置的 FTP 处理程序(无需替换),请将其放在您的 settings.py
中
DOWNLOAD_HANDLERS = {
"ftp": None,
}
默认的 HTTPS 处理程序使用 HTTP/1.1。要使用 HTTP/2
安装
Twisted[http2]>=17.9.0
以安装在 Twisted 中启用 HTTP/2 支持所需的软件包。按如下方式更新
DOWNLOAD_HANDLERS
DOWNLOAD_HANDLERS = { "https": "scrapy.core.downloader.handlers.http2.H2DownloadHandler", }
警告
Scrapy 中的 HTTP/2 支持尚处于实验阶段,目前不建议在生产环境中使用。未来的 Scrapy 版本可能会引入相关的更改,且不会有弃用期或警告。
注意
Scrapy 当前 HTTP/2 实现的已知限制包括
不支持 HTTP/2 明文 (h2c),因为没有主要的浏览器支持未加密的 HTTP/2(请参阅 http2 常见问题)。
没有设置可以指定大于默认值 16384 的最大 帧大小。与发送更大帧的服务器的连接将失败。
不支持 服务器推送,它们会被忽略。
不支持
bytes_received
和headers_received
信号。
DOWNLOAD_SLOTS¶
默认值:{}
允许基于每个槽位(域名)定义并发/延迟参数。
DOWNLOAD_SLOTS = { "quotes.toscrape.com": {"concurrency": 1, "delay": 2, "randomize_delay": False}, "books.toscrape.com": {"delay": 3, "randomize_delay": False}, }
注意
对于其他下载器槽位,将使用默认设置值。
DOWNLOAD_DELAY
:delay
CONCURRENT_REQUESTS_PER_DOMAIN
:concurrency
RANDOMIZE_DOWNLOAD_DELAY
:randomize_delay
DOWNLOAD_TIMEOUT¶
默认值:180
下载器在超时之前等待的时间量(以秒为单位)。
注意
可以使用 download_timeout
蜘蛛属性为每个蜘蛛设置此超时,并使用 download_timeout
Request.meta 键为每个请求设置此超时。
DOWNLOAD_MAXSIZE¶
默认值:1073741824
(1 GiB)
允许的最大响应正文大小(以字节为单位)。更大的响应将被中止并忽略。
这适用于压缩前后。如果解压缩响应正文会超过此限制,则会中止解压缩并忽略响应。
使用 0
禁用此限制。
可以使用 download_maxsize
蜘蛛属性为每个蜘蛛设置此限制,并使用 download_maxsize
Request.meta 键为每个请求设置此限制。
DOWNLOAD_WARNSIZE¶
默认值:33554432
(32 MiB)
如果响应的大小(压缩前或压缩后)超过此值,则会记录一条关于此的警告。
使用 0
禁用此限制。
可以使用 download_warnsize
蜘蛛属性为每个蜘蛛设置此限制,并使用 download_warnsize
Request.meta 键为每个请求设置此限制。
DOWNLOAD_FAIL_ON_DATALOSS¶
默认值:True
是否在出现损坏的响应时失败,即声明的 Content-Length
与服务器发送的内容不匹配或分块响应未正确完成。如果为 True
,则这些响应会引发 ResponseFailed([_DataLoss])
错误。如果为 False
,则这些响应将被传递,并且标志 dataloss
将添加到响应中,即:'dataloss' in response.flags
为 True
。
或者,可以通过将 download_fail_on_dataloss
Request.meta 键设置为 False
来基于每个请求设置此选项。
注意
损坏的响应或数据丢失错误可能在多种情况下发生,从服务器配置错误到网络错误到数据损坏。用户需要决定在考虑它们可能包含部分或不完整内容的情况下,处理损坏的响应是否有意义。如果 RETRY_ENABLED
为 True
并且此设置设置为 True
,则 ResponseFailed([_DataLoss])
失败将照常重试。
警告
此设置会被 H2DownloadHandler
下载处理程序忽略(请参阅 DOWNLOAD_HANDLERS
)。如果发生数据丢失错误,相应的 HTTP/2 连接可能会损坏,从而影响使用相同连接的其他请求;因此,对于使用该连接的每个请求,都会始终引发 ResponseFailed([InvalidBodyLengthError])
失败。
DUPEFILTER_CLASS¶
默认值:'scrapy.dupefilters.RFPDupeFilter'
用于检测和过滤重复请求的类。
默认值 (RFPDupeFilter
) 基于 REQUEST_FINGERPRINTER_CLASS
设置进行过滤。
可以通过将 DUPEFILTER_CLASS
设置为 'scrapy.dupefilters.BaseDupeFilter'
来禁用重复请求的过滤。但是,请务必小心,因为您可能会陷入爬取循环。通常,更好的方法是将 dont_filter
参数设置为 True
,用于不应过滤的特定 Request
。
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,
}
包含 Scrapy 中默认可用的扩展及其顺序的字典。此设置包含所有稳定的内置扩展。请记住,其中一些需要通过设置启用。
FEED_TEMPDIR¶
Feed 临时目录允许您设置自定义文件夹以保存爬虫临时文件,然后使用 FTP Feed 存储 和 Amazon S3 上传。
FEED_STORAGE_GCS_ACL¶
将项目存储到 Google Cloud Storage 时使用的访问控制列表 (ACL)。有关如何设置此值的更多信息,请参阅 Google Cloud 文档 中的 JSON API 列。
FTP_PASSIVE_MODE¶
默认值:True
是否在启动 FTP 传输时使用被动模式。
FTP_PASSWORD¶
默认值:"guest"
当 Request
元数据中没有 "ftp_password"
时,用于 FTP 连接的密码。
注意
释义 RFC 1635,尽管通常使用“guest”或电子邮件地址作为匿名 FTP 的密码,但某些 FTP 服务器会明确要求用户的电子邮件地址,并且不允许使用“guest”密码登录。
FTP_USER¶
默认值:"anonymous"
当 Request
元数据中没有 "ftp_user"
时,用于 FTP 连接的用户名。
GCS_PROJECT_ID¶
默认值:None
将数据存储到 Google Cloud Storage 时使用的项目 ID。
ITEM_PIPELINES¶
默认值:{}
包含要使用的项目管道及其顺序的字典。顺序值是任意的,但习惯上在 0-1000 范围内定义它们。较低的顺序在较高的顺序之前处理。
示例
ITEM_PIPELINES = {
"mybot.pipelines.validate.ValidateMyItem": 300,
"mybot.pipelines.validate.StoreMyItem": 800,
}
ITEM_PIPELINES_BASE¶
默认值:{}
一个包含Scrapy中默认启用的管道(pipelines)的字典。您不应该在项目中修改此设置,而是修改ITEM_PIPELINES
。
JOBDIR¶
默认值:None
一个字符串,指示在暂停和恢复爬取时存储爬取状态的目录。
LOG_ENABLED¶
默认值:True
是否启用日志记录。
LOG_ENCODING¶
默认值:'utf-8'
用于日志记录的编码。
LOG_FILE¶
默认值:None
用于日志输出的文件名。如果为None
,则使用标准错误。
LOG_FILE_APPEND¶
默认值:True
如果为False
,则使用LOG_FILE
指定的文件将被覆盖(丢弃之前运行的任何输出)。
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_FORMATTER¶
默认值:scrapy.logformatter.LogFormatter
用于格式化不同操作的日志消息的类。
LOG_LEVEL¶
默认值:'DEBUG'
要记录的最低级别。可用级别:CRITICAL、ERROR、WARNING、INFO、DEBUG。有关更多信息,请参阅日志记录。
LOG_STDOUT¶
默认值:False
如果为True
,则进程的所有标准输出(和错误)将重定向到日志。例如,如果您print('hello')
,它将显示在Scrapy日志中。
LOG_SHORT_NAMES¶
默认值:False
如果为True
,则日志仅包含根路径。如果设置为False
,则显示负责日志输出的组件。
LOGSTATS_INTERVAL¶
默认值:60.0
LogStats
每次打印统计信息的间隔(以秒为单位)。
MEMDEBUG_ENABLED¶
默认值:False
是否启用内存调试。
MEMDEBUG_NOTIFY¶
默认值:[]
启用内存调试时,如果此设置不为空,则内存报告将发送到指定的地址,否则报告将写入日志。
示例
MEMDEBUG_NOTIFY = ['[email protected]']
MEMUSAGE_ENABLED¶
默认值:True
范围:scrapy.extensions.memusage
是否启用内存使用扩展。此扩展跟踪进程使用的峰值内存(将其写入统计信息)。它还可以选择在超过内存限制时关闭Scrapy进程(请参阅MEMUSAGE_LIMIT_MB
),并在发生这种情况时通过电子邮件通知(请参阅MEMUSAGE_NOTIFY_MAIL
)。
请参阅内存使用扩展。
MEMUSAGE_LIMIT_MB¶
默认值:0
范围:scrapy.extensions.memusage
在关闭Scrapy之前允许的最大内存量(以兆字节为单位)(如果MEMUSAGE_ENABLED为True)。如果为零,则不会执行检查。
请参阅内存使用扩展。
MEMUSAGE_CHECK_INTERVAL_SECONDS¶
默认值: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
在发送警告电子邮件以通知内存使用情况之前允许的最大内存量(以兆字节为单位)。如果为零,则不会发出警告。
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
为零(默认值),则此选项无效。
REACTOR_THREADPOOL_MAXSIZE¶
默认值:10
Twisted Reactor线程池大小的最大限制。这是Scrapy各种组件使用的通用多用途线程池。线程化DNS解析器、BlockingFeedStorage、S3FilesStore仅举几例。如果您遇到阻塞IO不足的问题,请增加此值。
REDIRECT_PRIORITY_ADJUST¶
默认值:+2
范围:scrapy.downloadermiddlewares.redirect.RedirectMiddleware
调整重定向请求相对于原始请求的优先级。
正的优先级调整(默认值)表示更高的优先级。
负的优先级调整表示较低的优先级。
ROBOTSTXT_OBEY¶
默认值:False
范围:scrapy.downloadermiddlewares.robotstxt
如果启用,Scrapy将遵守robots.txt策略。有关更多信息,请参阅RobotsTxtMiddleware。
注意
由于历史原因,默认值为False
,但此选项在scrapy startproject
命令生成的settings.py文件中默认启用。
ROBOTSTXT_PARSER¶
默认值:'scrapy.robotstxt.ProtegoRobotParser'
用于解析robots.txt
文件的解析器后端。有关更多信息,请参阅RobotsTxtMiddleware。
ROBOTSTXT_USER_AGENT¶
默认值:None
用于在robots.txt文件中匹配的用户代理字符串。如果为None
,则使用您随请求发送的用户代理标头或USER_AGENT
设置(按此顺序)来确定要在robots.txt文件中使用的用户代理。
SCHEDULER¶
默认值:'scrapy.core.scheduler.Scheduler'
用于爬取的调度程序类。有关详细信息,请参阅调度程序主题。
SCHEDULER_DEBUG¶
默认值:False
设置为True
将记录有关请求调度程序的调试信息。目前仅记录(一次)请求无法序列化到磁盘的情况。统计计数器(scheduler/unserializable
)跟踪发生这种情况的次数。
日志中的示例条目
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)
SCHEDULER_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¶
默认值:'scrapy.pqueues.ScrapyPriorityQueue'
调度器使用的优先级队列类型。另一种可用类型是 scrapy.pqueues.DownloaderAwarePriorityQueue
。当您并行抓取许多不同的域名时,scrapy.pqueues.DownloaderAwarePriorityQueue
的效果优于 scrapy.pqueues.ScrapyPriorityQueue
。但目前 scrapy.pqueues.DownloaderAwarePriorityQueue
无法与 CONCURRENT_REQUESTS_PER_IP
同时使用。
SCRAPER_SLOT_MAX_ACTIVE_SIZE¶
版本 2.0 中新增。
默认值:5_000_000
正在处理的响应数据的软限制(以字节为单位)。
当所有正在处理的响应的大小总和超过此值时,Scrapy 不会处理新的请求。
SPIDER_CONTRACTS¶
默认值:: {}
一个字典,包含在您的项目中启用的蜘蛛契约,用于测试蜘蛛。有关更多信息,请参阅 Spiders Contracts。
SPIDER_CONTRACTS_BASE¶
默认值
{
"scrapy.contracts.default.UrlContract": 1,
"scrapy.contracts.default.ReturnsContract": 2,
"scrapy.contracts.default.ScrapesContract": 3,
}
一个字典,包含 Scrapy 在默认情况下启用的契约。您不应该在您的项目中修改此设置,而应该修改 SPIDER_CONTRACTS
。有关更多信息,请参阅 Spiders 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¶
默认值:False
默认情况下,当 Scrapy 尝试从 SPIDER_MODULES
导入蜘蛛类时,如果出现任何 ImportError
或 SyntaxError
异常,它将发出响亮的错误。但是,您可以选择使此异常静默并将其转换为简单的警告,方法是设置 SPIDER_LOADER_WARN_ONLY = True
。
注意
一些 scrapy 命令 已经将此设置运行为 True
(即,它们只会发出警告,不会失败),因为它们实际上不需要加载蜘蛛类即可工作:scrapy runspider
、scrapy settings
、scrapy startproject
、scrapy version
。
SPIDER_MIDDLEWARES¶
默认值:: {}
一个字典,包含在您的项目中启用的蜘蛛中间件及其顺序。有关更多信息,请参阅 Activating a spider middleware。
SPIDER_MIDDLEWARES_BASE¶
默认值
{
"scrapy.spidermiddlewares.httperror.HttpErrorMiddleware": 50,
"scrapy.spidermiddlewares.referer.RefererMiddleware": 700,
"scrapy.spidermiddlewares.urllength.UrlLengthMiddleware": 800,
"scrapy.spidermiddlewares.depth.DepthMiddleware": 900,
}
一个字典,包含 Scrapy 在默认情况下启用的蜘蛛中间件及其顺序。较低的顺序更靠近引擎,较高的顺序更靠近蜘蛛。有关更多信息,请参阅 Activating a spider middleware。
SPIDER_MODULES¶
默认值:[]
Scrapy 将在其中查找蜘蛛的模块列表。
示例
SPIDER_MODULES = ["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 控制台(前提是其扩展也已启用)。
TEMPLATES_DIR¶
默认值:scrapy 模块内的 templates
目录
使用 startproject
命令创建新项目和使用 genspider
命令创建新蜘蛛时,查找模板的目录。
项目名称不得与 project
子目录中的自定义文件或目录的名称冲突。
TWISTED_REACTOR¶
版本 2.0 中新增。
默认值:None
给定 reactor
的导入路径。
如果尚未安装其他反应器,Scrapy 将安装此反应器,例如当调用 scrapy
CLI 程序或使用 CrawlerProcess
类时。
如果您使用的是 CrawlerRunner
类,您还需要手动安装正确的反应器。您可以使用 install_reactor()
来完成此操作。
- scrapy.utils.reactor.install_reactor(reactor_path: str, event_loop_path: str | None = None) None [source]¶
使用指定的导入路径安装
reactor
。如果启用了 asyncio 反应器,则还会使用指定的导入路径安装 asyncio 事件循环。
如果反应器已经安装,install_reactor()
不会有任何影响。
CrawlerRunner.__init__
如果安装的反应器与 TWISTED_REACTOR
设置不匹配,则会引发 Exception
;因此,在项目文件和导入的第三方库中具有顶级 reactor
导入将导致 Scrapy 在检查已安装的反应器时引发 Exception
。
为了使用 Scrapy 安装的反应器
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 = ["https://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")
引发 Exception
,变为
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 = ["https://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")
设置 TWISTED_REACTOR
的默认值为 None
,这意味着 Scrapy 将会使用已安装的现有反应器,或者安装 Twisted 为当前平台定义的默认反应器。这样做是为了保持向后兼容性,并避免使用非默认反应器可能导致的问题。
2.7 版中的更改: 现在,startproject
命令会将此设置在生成的 settings.py
文件中设置为 twisted.internet.asyncioreactor.AsyncioSelectorReactor
。
更多信息,请参阅 选择反应器和 GUI 工具包集成。
URLLENGTH_LIMIT¶
默认值:2083
范围:spidermiddlewares.urllength
允许抓取的 URL 的最大长度。
如果 URL 长度不断增加,此设置可以作为停止条件,例如,可能是目标服务器或您的代码中存在编程错误导致的。另请参阅 REDIRECT_MAX_TIMES
和 DEPTH_LIMIT
。
使用 0
允许任何长度的 URL。
默认值是从 Microsoft Internet Explorer 的最大 URL 长度 复制而来,即使此设置存在的原因有所不同。
USER_AGENT¶
默认值:"Scrapy/VERSION (+https://scrapy.net.cn)"
抓取时使用的默认 User-Agent,除非被覆盖。如果 ROBOTSTXT_USER_AGENT
设置为 None
并且没有为请求指定覆盖的 User-Agent 标头,则 RobotsTxtMiddleware
也使用此 User-Agent。
其他地方记录的设置:¶
以下设置在其他地方有记录,请检查每个具体情况以了解如何启用和使用它们。