设置¶
Scrapy 设置允许您自定义所有 Scrapy 组件的行为,包括核心、扩展、管道和爬虫本身。
设置的基础设施提供了一个全局的键值映射命名空间,代码可以使用它来获取配置值。设置可以通过不同的机制进行填充,这些机制将在下面描述。
设置也是选择当前活动的Scrapy项目的机制(如果您有多个项目)。
有关可用内置设置的列表,请参阅:内置设置参考。
指定设置¶
当你使用Scrapy时,你需要告诉它你正在使用哪些设置。你可以通过使用环境变量SCRAPY_SETTINGS_MODULE来实现这一点。
SCRAPY_SETTINGS_MODULE 的值应采用 Python 路径语法,例如
myproject.settings。请注意,设置模块应位于
Python 的 导入搜索路径 上。
填充设置¶
设置可以通过不同的机制进行填充,每种机制都有不同的优先级。以下是按优先级递减顺序排列的列表:
命令行选项(最高优先级)
每个爬虫的设置
项目设置模块
由附加组件设置的设置
每个命令的默认设置
默认全局设置(优先级较低)
这些设置源的人口由内部处理,但也可以使用API调用进行手动处理。请参阅Settings API主题以获取参考。
这些机制将在下面更详细地描述。
1. 命令行选项¶
命令行提供的参数具有最高的优先级,会覆盖任何其他选项。您可以使用-s(或--set)命令行选项显式覆盖一个(或多个)设置。
示例:
scrapy crawl myspider -s LOG_FILE=scrapy.log
2. 每个爬虫的设置¶
蜘蛛(请参考Spiders章节)可以定义自己的设置,这些设置将优先并覆盖项目设置。一种方法是通过设置它们的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() 方法中修改设置,例如基于 spider
arguments 或其他逻辑:
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. 由附加组件设置的设置¶
Add-ons 可以修改设置。它们应该按照这个优先级进行,尽管这不是强制性的。
5. 每个命令的默认设置¶
每个Scrapy工具命令都可以有自己的默认设置,这些设置会覆盖全局的默认设置。这些自定义命令设置在命令类的default_settings属性中指定。
6. 默认全局设置¶
全局默认设置位于scrapy.settings.default_settings模块中,并在内置设置参考部分中有详细文档。
与pickle的兼容性¶
设置的值必须是picklable。
导入路径和类¶
版本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 属性在蜘蛛初始化后在基础蜘蛛类中设置。如果你想在初始化之前使用设置(例如,在你的蜘蛛的 __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
用于需要访问亚马逊网络服务的代码的AWS访问密钥, 例如S3 feed storage backend。
AWS_SECRET_ACCESS_KEY¶
默认值:None
用于需要访问亚马逊网络服务的代码的AWS密钥, 例如S3 feed storage backend。
AWS_SESSION_TOKEN¶
默认值:None
用于需要访问亚马逊网络服务的代码的AWS安全令牌, 例如在使用临时安全凭证时的S3 feed storage backend。
AWS_ENDPOINT_URL¶
默认值:None
用于类似S3存储的端点URL,例如Minio或s3.scality。
AWS_USE_SSL¶
默认值:None
如果您想禁用与S3或类似S3存储的通信的SSL连接,请使用此选项。默认情况下将使用SSL。
AWS_验证¶
默认值:None
验证Scrapy与S3或类似S3存储之间的SSL连接。默认情况下,将进行SSL验证。
AWS_REGION_NAME¶
默认值:None
与AWS客户端关联的区域名称。
ASYNCIO_EVENT_LOOP¶
默认值:None
给定 asyncio 事件循环类的导入路径。
如果启用了asyncio反应器(参见TWISTED_REACTOR),此设置可用于指定与之一起使用的asyncio事件循环。将此设置设置为所需asyncio事件循环类的导入路径。如果此设置为None,则将使用默认的asyncio事件循环。
如果您正在手动安装asyncio反应器,使用install_reactor()函数,您可以使用event_loop_path参数来指定要使用的事件循环类的导入路径。
请注意,事件循环类必须继承自 asyncio.AbstractEventLoop。
注意
请注意,当使用非默认事件循环时(无论是通过ASYNCIO_EVENT_LOOP定义还是通过install_reactor()安装),Scrapy 将调用asyncio.set_event_loop(),这将设置指定的事件循环为当前操作系统线程的当前循环。
BOT_NAME¶
默认值:'scrapybot'
此Scrapy项目实现的机器人名称(也称为项目名称)。此名称也将用于日志记录。
当你使用startproject命令创建项目时,它会自动填充你的项目名称。
并发项目¶
默认值:100
在item pipelines中并行处理的最大并发项目数(每个响应)。
并发请求¶
默认值:16
Scrapy下载器将执行的最大并发(即同时)请求数。
每个域的并发请求数¶
默认值:8
将对任何单个域执行的最大并发(即同时)请求数。
另请参阅:AutoThrottle 扩展 及其
AUTOTHROTTLE_TARGET_CONCURRENCY 选项。
每个IP的并发请求数¶
默认值:0
对任何单个IP执行的最大并发(即同时)请求数。如果非零,则忽略CONCURRENT_REQUESTS_PER_DOMAIN设置,而使用此设置。换句话说,并发限制将按IP而不是按域名应用。
此设置也会影响 DOWNLOAD_DELAY 和
AutoThrottle 扩展:如果 CONCURRENT_REQUESTS_PER_IP
不为零,下载延迟将按 IP 执行,而不是按域名。
DEFAULT_ITEM_CLASS¶
默认值:'scrapy.Item'
用于在Scrapy shell中实例化项目的默认类。
默认请求头¶
默认:
{
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "en",
}
用于Scrapy HTTP请求的默认头信息。它们在DefaultHeadersMiddleware中被填充。
注意
通过Cookie头设置的Cookies不会被CookiesMiddleware考虑。如果你需要为请求设置cookies,请使用Request.cookies参数。这是一个已知的当前限制,正在解决中。
深度限制¶
默认值:0
范围: scrapy.spidermiddlewares.depth.DepthMiddleware
允许对任何站点进行爬取的最大深度。如果为零,则不施加限制。
深度优先¶
默认值:0
范围: scrapy.spidermiddlewares.depth.DepthMiddleware
一个整数,用于根据其深度调整priority的Request。
请求的优先级调整如下:
request.priority = request.priority - (depth * DEPTH_PRIORITY)
随着深度的增加,DEPTH_PRIORITY的正值会降低请求优先级(BFO),而负值则会增加请求优先级(DFO)。另请参阅Does Scrapy crawl in breadth-first or depth-first order?。
注意
此设置以相反的方式调整优先级,与其他优先级设置相比REDIRECT_PRIORITY_ADJUST和RETRY_PRIORITY_ADJUST。
深度统计详细信息¶
默认值:False
范围: scrapy.spidermiddlewares.depth.DepthMiddleware
是否收集详细的深度统计信息。如果启用此选项,将在统计信息中收集每个深度的请求数量。
DNSCACHE_ENABLED¶
默认值:True
是否启用DNS内存缓存。
DNSCACHE_SIZE¶
默认值:10000
DNS内存缓存大小。
DNS解析器¶
版本2.0新增。
默认值:'scrapy.resolver.CachingThreadedResolver'
用于解析DNS名称的类。默认的scrapy.resolver.CachingThreadedResolver
支持通过DNS_TIMEOUT设置指定DNS请求的超时时间,
但仅适用于IPv4地址。Scrapy提供了另一种解析器,
scrapy.resolver.CachingHostnameResolver,它支持IPv4/IPv6地址,但不考虑
DNS_TIMEOUT设置。
DNS超时¶
默认值:60
处理DNS查询的超时时间,单位为秒。支持浮点数。
下载器¶
默认值:'scrapy.core.downloader.Downloader'
用于爬取的下载器。
下载器_HTTP客户端工厂¶
默认值:'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'。
下载器客户端上下文工厂¶
默认值:'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网站所必需的:例如,您可能需要使用'DEFAULT:!DH'来访问具有弱DH参数的网站,或者如果网站要求,启用DEFAULT中未包含的特定加密算法。
下载器客户端TLS方法¶
默认值: '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
下载器客户端TLS详细日志记录¶
默认值:False
将此设置为True将在建立HTTPS连接后启用关于TLS连接参数的DEBUG级别消息。记录的信息类型取决于OpenSSL和pyOpenSSL的版本。
此设置仅用于默认的
DOWNLOADER_CLIENTCONTEXTFACTORY。
下载器中间件¶
默认值:: {}
一个包含项目中启用的下载器中间件及其顺序的字典。更多信息请参见激活下载器中间件。
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。更多信息请参见激活下载器中间件。
下载器统计¶
默认值:True
是否启用下载器统计信息收集。
下载延迟¶
默认值: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蜘蛛属性为每个蜘蛛设置。
也可以按域名更改此设置,尽管这需要非平凡的代码。请参阅AutoThrottle扩展的实现以获取示例。
下载处理器¶
默认值:{}
一个包含项目中启用的请求下载器处理程序的字典。
请参阅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。
你可以通过将None分配给它们在DOWNLOAD_HANDLERS中的URI方案来禁用任何这些下载处理器。例如,要禁用内置的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 faq)。
没有设置可以指定一个大于默认值16384的最大帧大小。连接到发送更大帧的服务器将会失败。
不支持服务器推送,这些推送将被忽略。
不支持
bytes_received和headers_received信号。
下载插槽¶
默认值:{}
允许在每个插槽(域)的基础上定义并发/延迟参数:
DOWNLOAD_SLOTS = { "quotes.toscrape.com": {"concurrency": 1, "delay": 2, "randomize_delay": False}, "books.toscrape.com": {"delay": 3, "randomize_delay": False}, }
注意
对于其他下载器插槽,将使用默认设置值:
DOWNLOAD_DELAY:delayCONCURRENT_REQUESTS_PER_DOMAIN:concurrencyRANDOMIZE_DOWNLOAD_DELAY:randomize_delay
下载超时¶
默认值:180
下载器在超时前等待的时间(以秒为单位)。
注意
此超时可以通过使用download_timeout
蜘蛛属性为每个蜘蛛设置,也可以通过使用download_timeout
Request.meta键为每个请求设置。
下载最大大小¶
默认值:1073741824 (1 GiB)
允许的最大响应体大小(以字节为单位)。更大的响应将被中止并忽略。
这适用于压缩前后。如果解压缩响应体超过此限制,解压缩将被中止,并且响应将被忽略。
使用 0 来禁用此限制。
这个限制可以通过使用download_maxsize蜘蛛属性为每个蜘蛛设置,也可以通过使用download_maxsize Request.meta键为每个请求设置。
下载警告大小¶
默认值: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' 来禁用重复请求的过滤。
但是,请非常小心这一点,因为您可能会陷入爬取循环。
通常更好的做法是在不应过滤的特定 Request 上将 dont_filter 参数设置为
True。
DUPEFILTER_DEBUG¶
默认值:False
默认情况下,RFPDupeFilter 只记录第一个重复请求。
将 DUPEFILTER_DEBUG 设置为 True 将使其记录所有重复请求。
编辑器¶
默认值:vi(在Unix系统上)或IDLE编辑器(在Windows上)
用于使用edit命令编辑蜘蛛的编辑器。
此外,如果设置了EDITOR环境变量,edit
命令将优先使用它而不是默认设置。
扩展¶
默认值:: {}
一个包含项目中启用的扩展及其顺序的字典。
扩展基础¶
默认:
{
"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 Temp 目录允许您设置一个自定义文件夹,用于在上传到 FTP feed storage 和 Amazon S3 之前保存爬虫的临时文件。
FEED_STORAGE_GCS_ACL¶
用于将项目存储到Google Cloud Storage时使用的访问控制列表(ACL)。 有关如何设置此值的更多信息,请参阅Google Cloud文档中的JSON API列。
FTP被动模式¶
默认值:True
在启动FTP传输时是否使用被动模式。
FTP密码¶
默认值: "guest"
当Request元数据中没有"ftp_password"时,用于FTP连接的密码。
注意
引用RFC 1635,虽然通常使用密码“guest”或电子邮件地址进行匿名FTP登录,但一些FTP服务器明确要求用户提供电子邮件地址,并且不允许使用“guest”密码登录。
FTP用户¶
默认值:"anonymous"
当Request元数据中没有"ftp_user"时,用于FTP连接的用户名。
GCS_PROJECT_ID¶
默认值:None
在Google Cloud Storage上存储数据时将使用的项目ID。
项目管道¶
默认值:{}
一个包含要使用的项目管道及其顺序的字典。顺序值是任意的,但通常习惯在0-1000范围内定义它们。较低的顺序在较高的顺序之前处理。
示例:
ITEM_PIPELINES = {
"mybot.pipelines.validate.ValidateMyItem": 300,
"mybot.pipelines.validate.StoreMyItem": 800,
}
ITEM_PIPELINES_BASE¶
默认值:{}
一个包含Scrapy中默认启用的管道的字典。你永远不应该在你的项目中修改这个设置,而是应该修改ITEM_PIPELINES。
JOBDIR¶
默认值:None
一个字符串,指示在暂停和恢复爬取时用于存储爬取状态的目录。
日志启用¶
默认值:True
是否启用日志记录。
日志编码¶
默认值:'utf-8'
用于日志记录的编码。
日志文件¶
默认值:None
用于日志输出的文件名。如果为None,将使用标准错误输出。
LOG_FILE_APPEND¶
默认值:True
如果 False,则使用 LOG_FILE 指定的日志文件将被覆盖(丢弃之前运行的输出,如果有的话)。
日志格式¶
默认值:'%(asctime)s [%(name)s] %(levelname)s: %(message)s'
用于格式化日志消息的字符串。请参阅 Python 日志记录文档 以获取完整的可用占位符列表。
日志日期格式¶
默认值:'%Y-%m-%d %H:%M:%S'
用于格式化日期/时间的字符串,扩展了%(asctime)s占位符
在LOG_FORMAT中。请参阅
Python datetime 文档以获取
所有可用指令的完整列表。
日志格式化器¶
默认值:scrapy.logformatter.LogFormatter
用于格式化日志消息的类,适用于不同的操作。
日志级别¶
默认值:'DEBUG'
记录的最低级别。可用的级别有:CRITICAL, ERROR, WARNING, INFO, DEBUG。更多信息请参见 Logging。
LOG_STDOUT¶
默认值:False
如果 True,你的进程的所有标准输出(和错误)将被重定向到日志中。例如,如果你 print('hello'),它将会出现在 Scrapy 日志中。
日志简称¶
默认值:False
如果 True,日志将仅包含根路径。如果设置为 False,则显示负责日志输出的组件
LOGSTATS_INTERVAL¶
默认值:60.0
由LogStats进行的统计信息日志打印之间的间隔(以秒为单位)。
MEMDEBUG_ENABLED¶
默认值:False
是否启用内存调试。
MEMDEBUG_NOTIFY¶
默认值:[]
当启用内存调试时,如果此设置不为空,内存报告将发送到指定的地址,否则报告将写入日志。
示例:
MEMDEBUG_NOTIFY = ['user@example.com']
MEMUSAGE_ENABLED¶
默认值:True
范围: scrapy.extensions.memusage
是否启用内存使用扩展。此扩展会跟踪进程使用的峰值内存(将其写入统计信息)。它还可以在超过内存限制时选择性地关闭Scrapy进程(参见MEMUSAGE_LIMIT_MB),并在发生这种情况时通过电子邮件通知(参见MEMUSAGE_NOTIFY_MAIL)。
参见 内存使用扩展。
内存使用限制(MB)¶
默认值:0
范围: scrapy.extensions.memusage
在关闭Scrapy之前允许的最大内存量(以兆字节为单位)(如果MEMUSAGE_ENABLED为True)。如果为零,则不执行检查。
参见 内存使用扩展。
内存使用检查间隔秒数¶
默认值:60.0
范围: scrapy.extensions.memusage
内存使用扩展
检查当前的内存使用情况,与由
MEMUSAGE_LIMIT_MB 和 MEMUSAGE_WARNING_MB
设置的限制作比较,在固定的时间间隔内进行。
这设置了这些间隔的长度,以秒为单位。
参见 内存使用扩展。
内存使用通知邮件¶
默认值:False
范围: scrapy.extensions.memusage
如果达到内存限制,将通知的电子邮件列表。
示例:
MEMUSAGE_NOTIFY_MAIL = ['user@example.com']
参见 内存使用扩展。
内存使用警告(MB)¶
默认值:0
范围: scrapy.extensions.memusage
在发送警告电子邮件通知之前允许的最大内存量(以兆字节为单位)。如果为零,则不会产生警告。
NEWSPIDER_MODULE¶
默认值: ''
使用genspider命令创建新爬虫的模块。
示例:
NEWSPIDER_MODULE = 'mybot.spiders_dev'
随机化下载延迟¶
默认值: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不足的问题,请增加此值。
重定向优先级调整¶
默认值:+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头或USER_AGENT设置(按此顺序)来确定在robots.txt文件中使用的用户代理。
调度器¶
默认值: 'scrapy.core.scheduler.Scheduler'
用于爬取的调度器类。 详情请参见Scheduler主题。
调度器调试¶
默认值: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)
调度器磁盘队列¶
默认值:'scrapy.squeues.PickleLifoDiskQueue'
调度器将使用的磁盘队列类型。其他可用的类型有
scrapy.squeues.PickleFifoDiskQueue, scrapy.squeues.MarshalFifoDiskQueue,
scrapy.squeues.MarshalLifoDiskQueue.
调度器内存队列¶
默认值:'scrapy.squeues.LifoMemoryQueue'
调度器使用的内存队列类型。其他可用的类型是:
scrapy.squeues.FifoMemoryQueue。
调度器优先级队列¶
默认值: '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中默认启用的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¶
默认值:: {}
一个包含项目中启用的爬虫中间件及其顺序的字典。更多信息请参见激活爬虫中间件。
SPIDER_MIDDLEWARES_BASE¶
默认:
{
"scrapy.spidermiddlewares.httperror.HttpErrorMiddleware": 50,
"scrapy.spidermiddlewares.referer.RefererMiddleware": 700,
"scrapy.spidermiddlewares.urllength.UrlLengthMiddleware": 800,
"scrapy.spidermiddlewares.depth.DepthMiddleware": 900,
}
一个包含Scrapy中默认启用的爬虫中间件及其顺序的字典。低顺序更接近引擎,高顺序更接近爬虫。更多信息请参见激活爬虫中间件。
SPIDER_MODULES¶
默认值:[]
Scrapy 将查找蜘蛛的模块列表。
示例:
SPIDER_MODULES = ["mybot.spiders_prod", "mybot.spiders_dev"]
统计类¶
默认值:'scrapy.statscollectors.MemoryStatsCollector'
用于收集统计信息的类,必须实现 Stats Collector API。
统计信息转储¶
默认值:True
在蜘蛛完成后,将Scrapy统计信息转储(到Scrapy日志中)。
更多信息请参阅:Stats Collection。
STATSMAILER_RCPTS¶
默认值:[](空列表)
在爬虫完成抓取后发送Scrapy统计信息。更多信息请参见
StatsMailer。
TELNETCONSOLE_ENABLED¶
默认值:True
一个布尔值,用于指定是否启用telnet console(前提是其扩展也已启用)。
模板目录¶
默认:templates 目录在 scrapy 模块内
在使用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 reactor,还会安装具有指定导入路径的asyncio事件循环。
如果已经安装了反应器,
install_reactor() 将不会产生任何效果。
CrawlerRunner.__init__ 如果安装的反应器与
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 命令现在将此设置设置为
twisted.internet.asyncioreactor.AsyncioSelectorReactor 在生成的
settings.py 文件中。
有关更多信息,请参阅选择反应器和GUI工具包集成。
URL长度限制¶
默认值:2083
范围: spidermiddlewares.urllength
允许抓取的URL的最大长度。
此设置可以作为停止条件,以防止URL长度不断增加,这可能是由于目标服务器或您的代码中的编程错误引起的。另请参阅REDIRECT_MAX_TIMES和DEPTH_LIMIT。
使用 0 以允许任何长度的URL。
默认值是从Microsoft Internet Explorer 最大 URL 长度复制的,尽管此设置存在的原因不同。
用户代理¶
默认值: "Scrapy/VERSION (+https://scrapy.org)"
默认使用的User-Agent,除非被覆盖。如果ROBOTSTXT_USER_AGENT设置为None并且没有为请求指定覆盖的User-Agent头,则此用户代理也由RobotsTxtMiddleware使用。
在其他地方记录的设置:¶
以下设置在其他地方有文档记录,请查看每个具体情况以了解如何启用和使用它们。