设置

Scrapy 设置允许您自定义所有 Scrapy 组件的行为,包括核心、扩展、管道和 Spider 本身。

设置基础设施提供了一个键值映射的全局命名空间,代码可以使用它来获取配置值。设置可以通过下面描述的不同机制进行填充。

设置也是选择当前活动 Scrapy 项目(如果您有多个)的机制。

有关可用内置设置的列表,请参阅:内置设置参考

指定设置

当您使用 Scrapy 时,您必须告诉它您正在使用哪些设置。您可以通过使用环境变量 SCRAPY_SETTINGS_MODULE 来实现。

SCRAPY_SETTINGS_MODULE 的值应采用 Python 路径语法,例如 myproject.settings。请注意,设置模块应位于 Python 导入搜索路径 上。

填充设置

设置可以通过不同的机制进行填充,每种机制具有不同的优先级

1. 命令行设置

在命令行中设置的设置具有最高优先级,会覆盖任何其他设置。

您可以使用 -s(或 --set)命令行选项明确覆盖一个或多个设置。

示例:

scrapy crawl myspider -s LOG_LEVEL=INFO -s LOG_FILE=scrapy.log

2. Spider 设置

Spider 可以定义自己的设置,这些设置将具有优先权并覆盖项目设置。

注意

爬虫前设置 不能按 Spider 定义,并且当 在同一进程中运行多个 Spider 时,reactor 设置 不应为每个 Spider 设置不同的值。

一种方法是设置其 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 参数 或其他逻辑

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 项目包含一个设置模块,通常是一个名为 settings.py 的文件,您应该在此文件中填充适用于所有 Spider 的大部分设置。

另请参阅

指定设置

4. 附加组件设置

附加组件 可以修改设置。如果可能,它们应使用 "addon" 优先级来执行此操作。

5. 特定命令的默认设置

每个 Scrapy 命令 都可以有自己的默认设置,这些设置会覆盖 全局默认设置

这些特定于命令的默认设置在每个命令类的 default_settings 属性中指定。

6. 全局默认设置

scrapy.settings.default_settings 模块为一些 内置设置 定义了全局默认值。

注意

startproject 会生成一个 settings.py 文件,该文件将一些设置设置为不同的值。

设置的参考文档会指明默认值(如果存在)。如果 startproject 设置了一个值,该值将记录为默认值,而来自 scrapy.settings.default_settings 的值将记录为“回退值”。

与 pickle 的兼容性

设置值必须是 可 pickle 化 的。

导入路径和类

当设置引用 Scrapy 将导入的可调用对象(例如类或函数)时,您可以通过两种不同的方式指定该对象

  • 作为包含该对象的导入路径的字符串

  • 作为对象本身

例如

from mybot.pipelines.validate import ValidateMyItem

ITEM_PIPELINES = {
    # passing the classname...
    ValidateMyItem: 300,
    # ...equals passing the class path
    "mybot.pipelines.validate.ValidateMyItem": 300,
}

注意

不支持传递不可调用对象。

如何访问设置

在 spider 中,设置可以通过 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 初始化后在基础 Spider 类中设置。如果您想在初始化之前(例如,在您的 spider 的 __init__() 方法中)使用设置,您需要覆盖 from_crawler() 方法。

组件 也可以 访问设置

settings 对象可以像 dict 一样使用(例如 settings["LOG_ENABLED"])。但是,为了支持非字符串设置值(这些值可能以字符串形式从命令行传递),建议使用 Settings API 提供的方法之一。

组件优先级字典

**组件优先级字典**是一个 dict,其中键是 组件,值是组件优先级。例如

{
    "path.to.ComponentA": None,
    ComponentB: 100,
}

组件可以指定为类对象,也可以通过导入路径指定。

警告

组件优先级字典是常规的 dict 对象。请注意不要多次定义相同的组件,例如使用不同的导入路径字符串或同时定义导入路径和 type 对象。

优先级可以是 intNone

优先级为 1 的组件位于优先级为 2 的组件*之前*。然而,“位于之前”的含义取决于相应的设置。例如,在 DOWNLOADER_MIDDLEWARES 设置中,组件的 process_request() 方法在后续组件的方法之前执行,但其 process_response() 方法在后续组件的方法之后执行。

优先级为 None 的组件被禁用。

某些组件优先级字典会与一些内置值合并。例如,DOWNLOADER_MIDDLEWARESDOWNLOADER_MIDDLEWARES_BASE 合并。这就是 None 派上用场的地方,它允许您在常规设置中禁用基本设置中的组件

DOWNLOADER_MIDDLEWARES = {
    "scrapy.downloadermiddlewares.offsite.OffsiteMiddleware": None,
}

特殊设置

以下设置与其他所有设置的工作方式略有不同。

爬虫前设置

**爬虫前设置** 是在创建 Crawler 对象之前使用的设置。

这些设置不能从 spider 中设置。

这些设置包括

Reactor 设置

**Reactor 设置** 是与 Twisted reactor 绑定的设置。

这些设置可以从 spider 中定义。但是,由于每个进程只能使用一个 reactor,因此当 在同一进程中运行多个 spider 时,这些设置不能为每个 spider 使用不同的值。

通常,如果不同的 spider 定义了不同的值,则使用第一个定义的值。但是,如果两个 spider 请求不同的 reactor,则会引发异常。

这些设置包括

ASYNCIO_EVENT_LOOPTWISTED_REACTOR 在安装 reactor 时使用。其余设置在启动 reactor 时应用。

使用 AsyncCrawlerProcess 时,对于 TWISTED_REACTORASYNCIO_EVENT_LOOP 还有额外的限制:当此类别实例化时,它会安装 AsyncioSelectorReactor,忽略 TWISTED_REACTOR 的值,并使用传递给 AsyncCrawlerProcess.__init__()ASYNCIO_EVENT_LOOP 的值。如果稍后提供不同的 TWISTED_REACTORASYNCIO_EVENT_LOOP 值,例如在 per-spider 设置 中,则会引发异常。

所有这些设置,除了 ASYNCIO_EVENT_LOOP,仅在 Twisted reactor 被使用时才生效,即当 TWISTED_REACTOR_ENABLEDTrue 时。

日志设置

**日志设置** 是配置由 configure_logging() 安装的全局根日志处理器的设置。

这些设置可以从 spider 中定义。但是,由于每个进程只有一个根日志处理器处于活动状态,因此当 在同一进程中运行多个 spider 时,这些设置不能为每个 spider 使用不同的值。

这些设置包括

内置设置参考

以下是所有可用 Scrapy 设置的列表,按字母顺序排列,并附有其默认值和适用范围。

如果可用,适用范围会显示设置的使用位置,以及它是否与任何特定组件绑定。在这种情况下,将显示该组件的模块,通常是扩展、中间件或管道。这也意味着必须启用该组件,设置才能生效。

ADDONS

默认值:{}

一个字典,包含项目中启用的附加组件的路径及其优先级。有关更多信息,请参阅 附加组件

AWS_ACCESS_KEY_ID

默认值:None

需要访问 Amazon Web Services 的代码使用的 AWS 访问密钥,例如 S3 feed 存储后端

AWS_SECRET_ACCESS_KEY

默认值:None

需要访问 Amazon Web Services 的代码使用的 AWS 秘密密钥,例如 S3 feed 存储后端

AWS_SESSION_TOKEN

默认值:None

当使用 临时安全凭证 时,需要访问 Amazon Web Services 的代码使用的 AWS 安全令牌,例如 S3 feed 存储后端

AWS_ENDPOINT_URL

默认值:None

用于 S3 类存储(例如 Minio 或 s3.scality)的端点 URL。

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(),这会将指定的事件循环设置为当前 OS 线程的当前循环。

注意

这是一个 reactor 设置

BOT_NAME

默认值:<项目名称>回退值'scrapybot'

此 Scrapy 项目实现的 bot 名称(也称为项目名称)。此名称也将用于日志记录。

当您使用 startproject 命令创建项目时,它会自动填充您的项目名称。

CONCURRENT_ITEMS

默认值:100

item 管道 中并行处理的并发项目(每个响应)的最大数量。

CONCURRENT_REQUESTS

默认值:16

Scrapy 下载器将执行的最大并发(即同时)请求数。

CONCURRENT_REQUESTS_PER_DOMAIN

默认值:1回退值8

对任何单个域将执行的最大并发(即同时)请求数。

另请参阅:AutoThrottle 扩展 及其 AUTOTHROTTLE_TARGET_CONCURRENCY 选项。

DEFAULT_DROPITEM_LOG_LEVEL

默认值:"WARNING"

关于丢弃项目的消息的默认 日志级别

当通过从 item 管道process_item() 方法引发 scrapy.exceptions.DropItem 来丢弃项目时,会记录一条消息,默认情况下,其日志级别为此设置中配置的级别。

您可以将此日志级别指定为整数(例如 20)、日志级别常量(例如 logging.INFO)或带日志级别常量名称的字符串(例如 "INFO")。

在编写 item pipeline 时,您可以通过在 scrapy.exceptions.DropItem 异常中设置 scrapy.exceptions.DropItem.log_level 来强制使用不同的日志级别。例如

from scrapy.exceptions import DropItem


class MyPipeline:
    def process_item(self, item):
        if not item.get("price"):
            raise DropItem("Missing price data", log_level="INFO")
        return item

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 标头设置的 Cookies 不会被 CookiesMiddleware 考虑。如果您需要为请求设置 Cookies,请使用 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_ADJUSTRETRY_PRIORITY_ADJUST 相比,此设置**以相反的方式**调整优先级。

DEPTH_STATS_VERBOSE

默认值:False

作用域:scrapy.spidermiddlewares.depth.DepthMiddleware

是否收集详细的深度统计信息。如果启用此选项,则会在统计信息中收集每个深度的请求数量。

DNSCACHE_ENABLED

默认值:True

是否启用 DNS 内存缓存。

注意

此设置仅由 CachingThreadedResolverCachingHostnameResolver 使用。当 TWISTED_REACTOR_ENABLEDFalse 时,它不生效,并且当 DNS_RESOLVER 设置为不同的解析器时,也可能不生效。

注意

这是一个 reactor 设置

DNSCACHE_SIZE

默认值:10000

DNS 内存缓存大小,请参阅 DNSCACHE_ENABLED

注意

这是一个 reactor 设置

TWISTED_DNS_RESOLVER

默认值:'scrapy.resolver.CachingThreadedResolver'

Twisted 用于解析 DNS 名称的类。默认的 scrapy.resolver.CachingThreadedResolver 支持通过 DNS_TIMEOUT 设置指定 DNS 请求的超时时间,但仅适用于 IPv4 地址。Scrapy 提供了一个替代解析器 scrapy.resolver.CachingHostnameResolver,它支持 IPv4/IPv6 地址但未考虑 DNS_TIMEOUT 设置。

注意

TWISTED_REACTOR_ENABLEDFalse 时,此设置不生效。

注意

这是一个 reactor 设置

DNS_TIMEOUT

默认值:60

DNS 查询处理的超时时间(秒)。支持浮点数。

注意

此设置仅由 CachingThreadedResolver 使用。当 TWISTED_REACTOR_ENABLEDFalse 时,它不生效,并且当 DNS_RESOLVER 设置为不同的解析器时,也可能不生效。

注意

这是一个 reactor 设置

DOWNLOADER

默认值:'scrapy.core.downloader.Downloader'

用于爬取的下载器。

DOWNLOADER_CLIENT_TLS_CIPHERS

默认值:'DEFAULT'

使用此设置可自定义 HTTPS 下载处理器使用的 TLS/SSL 密码套件。

此设置应包含一个 OpenSSL 密码列表格式的字符串,这些密码将用作客户端密码。更改此设置可能对于访问某些 HTTPS 网站是必需的:例如,对于具有弱 DH 参数的网站,您可能需要使用 'DEFAULT:!DH';或者如果网站要求,则启用 DEFAULT 中未包含的特定密码。

将此设置设置为 None 以使用底层 TLS 实现的默认密码套件。

在 2.17.0 版本中更改: 添加了将其设置为 None 的支持。

注意

此设置的处理需要在 下载处理器 内部实现,因此不保证所有第三方处理器都支持。

另请参阅

协议版本和密码

DOWNLOAD_TLS_MAX_VERSION

在 2.17.0 版本中添加。

默认值:None

使用此设置可更改 Scrapy 允许使用的 TLS 协议的最大版本。

此设置必须是 None(在这种情况下它不影响版本选择),或者是以下字符串值之一

  • 'TLSv1.0'

  • 'TLSv1.1'

  • 'TLSv1.2'

  • 'TLSv1.3'

Scrapy 在进行 TLS 连接时通告的允许 TLS 版本范围将取决于 TLS 实现的默认值以及 DOWNLOAD_TLS_MIN_VERSIONDOWNLOAD_TLS_MAX_VERSION 的值。可以通过调整这些设置重新启用 TLS 实现支持但默认禁用的版本,但无法启用不受支持的版本,例如许多现代环境中低于 1.2 的任何版本。

注意

此设置的处理需要在 下载处理器 内部实现,因此不保证所有第三方处理器都支持。此外,支持的 TLS 版本集取决于处理器使用的 TLS 实现。

另请参阅

协议版本和密码

DOWNLOAD_TLS_MIN_VERSION

在 2.17.0 版本中添加。

默认值:None

使用此设置可更改 Scrapy 允许使用的 TLS 协议的最小版本。

有关详细信息和限制,请参阅 DOWNLOAD_TLS_MAX_VERSION

另请参阅

协议版本和密码

DOWNLOADER_CLIENT_TLS_VERBOSE_LOGGING

默认值:False

将此设置为 True 将在建立 HTTPS 连接后启用有关 TLS 连接参数的 DEBUG 级别消息。记录的信息类型取决于下载处理器的实现以及与 TLS 相关的库的版本。

注意

此设置的处理需要在 下载处理器 内部实现,因此不保证所有第三方处理器都支持。

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.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

默认值:1回退值0

对同一域连续两次请求之间的最短等待时间(秒)。

使用 DOWNLOAD_DELAY 来限制您的爬取速度,以避免对服务器造成过大压力。

支持小数。例如,每 10 秒发送最多 4 个请求

DOWNLOAD_DELAY = 2.5

此设置也受 RANDOMIZE_DOWNLOAD_DELAY 设置的影响,该设置默认启用。

请注意,DOWNLOAD_DELAY 可能会将每个域的有效并发数降低到 CONCURRENT_REQUESTS_PER_DOMAIN 以下。如果域的响应时间低于 DOWNLOAD_DELAY,则该域的有效并发数为 1。在测试节流配置时,通常首先降低 CONCURRENT_REQUESTS_PER_DOMAIN,并且只有当 CONCURRENT_REQUESTS_PER_DOMAIN 为 1 但需要更高的节流时才增加 DOWNLOAD_DELAY

注意

此延迟可以使用 download_delay spider 属性按 spider 设置。

也可以按域更改此设置,尽管这需要非简单的代码。有关示例,请参阅 AutoThrottle 扩展 的实现。

DOWNLOAD_BIND_ADDRESS

默认值:None

下载器连接的默认本地出站地址。

此设置可以是

  • 作为字符串的主机地址(例如 "127.0.0.2"),在这种情况下本地端口会自动选择,或者

  • 一个 (host, port) 元组(例如 ("127.0.0.2", 50000)),以绑定到特定的本地接口和特定的本地端口。

例如

# Bind to this local address
DOWNLOAD_BIND_ADDRESS = "127.0.0.2"
# Bind to this local address and local port
DOWNLOAD_BIND_ADDRESS = ("127.0.0.2", 5000)

如果设置,内置 HTTP 下载处理器默认使用此值。设置 bindaddress 请求元数据键以覆盖特定请求的值。

注意

此设置的处理需要在 下载处理器 内部实现,因此不保证所有第三方处理器都支持。指定端口不被 HttpxDownloadHandler 支持。

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.http11.HTTP11DownloadHandler",
    "https": "scrapy.core.downloader.handlers.http11.HTTP11DownloadHandler",
    "s3": "scrapy.core.downloader.handlers.s3.S3DownloadHandler",
    "ftp": "scrapy.core.downloader.handlers.ftp.FTPDownloadHandler",
}

(当 TWISTED_REACTOR_ENABLEDTrue 时)

{
    "data": "scrapy.core.downloader.handlers.datauri.DataURIDownloadHandler",
    "file": "scrapy.core.downloader.handlers.file.FileDownloadHandler",
    "http": "scrapy.core.downloader.handlers._httpx.HttpxDownloadHandler",
    "https": "scrapy.core.downloader.handlers._httpx.HttpxDownloadHandler",
    "s3": "scrapy.core.downloader.handlers.s3.S3DownloadHandler",
    "ftp": None,
}

(当 TWISTED_REACTOR_ENABLEDFalse 时)

一个字典,包含 Scrapy 中默认启用的 下载处理器。您不应在项目中修改此设置,而应修改 DOWNLOAD_HANDLERS

您可以通过在 DOWNLOAD_HANDLERS 中将其 URI scheme 设置为 None 来禁用任何这些下载处理器。例如,要禁用内置 FTP 处理器(不替换),请将其放置在您的 settings.py

DOWNLOAD_HANDLERS = {
    "ftp": None,
}

DOWNLOAD_SLOTS

默认值:{}

允许根据每个槽(域)定义并发/延迟参数

DOWNLOAD_SLOTS = {
    "quotes.toscrape.com": {"concurrency": 1, "delay": 2, "randomize_delay": False},
    "books.toscrape.com": {"delay": 3, "randomize_delay": False},
}

注意

对于其他下载器槽,将使用默认设置值

DOWNLOAD_TIMEOUT

默认值:180

下载器在超时前将等待的时间(秒)。

注意

此超时可以通过使用 download_timeout Request.meta 键进行每次请求设置。

注意

此设置的处理需要在 下载处理器 内部实现,因此不保证所有第三方处理器都支持。

DOWNLOAD_MAXSIZE

默认值:1073741824(1 GiB)

允许的最大响应体大小(字节)。更大的响应将被中止并忽略。

这适用于压缩前后。如果解压缩响应体将超过此限制,则解压缩将中止并忽略响应。

使用 0 禁用此限制。

注意

此限制可以通过使用 download_maxsize Request.meta 键进行每次请求设置。

注意

在解压缩响应之前检查响应需要在 下载处理器 内部实现,因此不保证所有第三方处理器都支持。

DOWNLOAD_WARNSIZE

默认值:33554432(32 MiB)

如果响应的大小(压缩前或压缩后)超过此值,将记录一条警告。

使用 0 禁用此限制。

注意

此限制可以通过使用 download_warnsize Request.meta 键进行每次请求设置。

注意

在解压缩响应之前检查响应需要在 下载处理器 内部实现,因此不保证所有第三方处理器都支持。

DOWNLOAD_FAIL_ON_DATALOSS

默认值:True

是否在响应损坏时失败,即当声明的 Content-Length 与服务器发送的内容不匹配或分块响应未正确完成时。如果为 True,这些响应会引发 ResponseDataLossError 异常。如果为 False,这些响应将通过,并且 dataloss 标志将添加到响应中,即:'dataloss' in response.flagsTrue

可选地,可以通过将 download_fail_on_dataloss Request.meta 键设置为 False 来按请求设置此项。

注意

损坏的响应或数据丢失错误可能在多种情况下发生,从服务器配置错误到网络错误再到数据损坏。用户可以自行决定处理损坏的响应是否有意义,因为它们可能包含部分或不完整的内容。如果 RETRY_ENABLEDTrue 且此设置也为 True,则 ResponseDataLossError 故障将照常重试。

注意

此设置的处理需要在 下载处理器 内部实现,因此不保证所有第三方处理器都支持。

警告

此设置会被 H2DownloadHandler 下载处理器 忽略。在数据丢失错误的情况下,相应的 HTTP/2 连接可能会损坏,影响使用相同连接的其他请求;因此,对于每个使用该连接的请求,总是会引发 ResponseFailed([InvalidBodyLengthError]) 故障。

DOWNLOAD_VERIFY_CERTIFICATES

默认值:False

HTTPS 下载处理器是否应在发出请求时验证服务器 TLS 证书,如果验证失败则中止请求。

注意

此设置的处理需要在 下载处理器 内部实现,因此不保证所有第三方处理器都支持。处理器的具体行为(例如,当此设置设置为 False 时是否记录证书问题)取决于其实现。

另请参阅

证书验证

DUPEFILTER_CLASS

默认值:'scrapy.dupefilters.RFPDupeFilter'

用于检测和过滤重复请求的类。

默认的 RFPDupeFilter 根据 REQUEST_FINGERPRINTER_CLASS 设置进行过滤。

要更改重复项的检查方式,您可以将 DUPEFILTER_CLASS 指向 RFPDupeFilter 的自定义子类,该子类覆盖其 __init__ 方法以使用 不同的请求指纹类。例如

from scrapy.dupefilters import RFPDupeFilter
from scrapy.utils.request import fingerprint


class CustomRequestFingerprinter:
    def fingerprint(self, request):
        return fingerprint(request, include_headers=["X-ID"])


class CustomDupeFilter(RFPDupeFilter):

    def __init__(self, path=None, debug=False, *, fingerprinter=None):
        super().__init__(
            path=path, debug=debug, fingerprinter=CustomRequestFingerprinter()
        )

要禁用重复请求过滤,请将 DUPEFILTER_CLASS 设置为 'scrapy.dupefilters.BaseDupeFilter'。请注意,不过滤重复请求可能会导致爬取循环。通常,最好在不应过滤的特定 Request 对象的 __init__ 方法上将 dont_filter 参数设置为 True

分配给 DUPEFILTER_CLASS 的类必须实现以下接口

class MyDupeFilter:

    @classmethod
    def from_crawler(cls, crawler):
        """Returns an instance of this duplicate request filtering class
        based on the current Crawler instance."""
        return cls()

    def request_seen(self, request):
        """Returns ``True`` if *request* is a duplicate of another request
        seen in a previous call to :meth:`request_seen`, or ``False``
        otherwise."""
        return False

    def open(self):
        """Called before the spider opens. It may return a deferred."""
        pass

    def close(self, reason):
        """Called before the spider closes. It may return a deferred."""
        pass

    def log(self, request, spider):
        """Logs that a request has been filtered out.

        It is called right after a call to :meth:`request_seen` that
        returns ``True``.

        If :meth:`request_seen` always returns ``False``, such as in the
        case of :class:`~scrapy.dupefilters.BaseDupeFilter`, this method
        may be omitted.
        """
        pass
class scrapy.dupefilters.BaseDupeFilter[source]

不过滤任何请求的虚拟重复请求过滤类(DUPEFILTER_CLASS)。

class scrapy.dupefilters.RFPDupeFilter(path: str | None = None, debug: bool = False, *, fingerprinter: RequestFingerprinterProtocol | None = None)[source]

重复请求过滤类(DUPEFILTER_CLASS),它根据规范化的(w3lib.url.canonicalize_url()urlmethodbody 过滤请求。

作业目录内容

警告

此类在 作业目录 中生成的文件是实现细节,并且在未来版本的 Scrapy 中可能会在不发出警告的情况下更改。请勿依赖以下信息进行调试以外的任何用途。

使用 JOBDIR 时,已见指纹会在 作业目录 中名为 requests.seen 的文件中进行跟踪,该文件每行包含 1 个请求指纹。

DUPEFILTER_DEBUG

默认值:False

默认情况下,RFPDupeFilter 只记录第一个重复请求。将 DUPEFILTER_DEBUG 设置为 True 将使其记录所有重复请求。

EDITOR

默认值:vi(在 Unix 系统上)或 IDLE 编辑器(在 Windows 上)

用于使用 edit 命令编辑 spider 的编辑器。此外,如果设置了 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 Temp 目录允许您设置一个自定义文件夹,用于在通过 FTP feed 存储Amazon S3 上传之前保存爬虫临时文件。

FEED_STORAGE_GCS_ACL

将项目存储到 Google Cloud Storage 时使用的访问控制列表 (ACL)。有关如何设置此值的更多信息,请参阅 Google Cloud 文档 中 *JSON API* 列。

FORCE_CRAWLER_PROCESS

默认值:False

如果为 False,则 需要 CrawlerProcess 的 Scrapy 命令 将根据 TWISTED_REACTOR 设置的值决定是使用 scrapy.crawler.AsyncCrawlerProcess 还是 scrapy.crawler.CrawlerProcess,但会忽略 per-spider 设置 中的值。

如果为 True,这些命令将始终使用 CrawlerProcess

如果您想在 per-spider 设置 中将 TWISTED_REACTOR 设置为非默认值,请将此设置为 True

FTP_PASSIVE_MODE

默认值:True

在启动 FTP 传输时是否使用被动模式。

注意

此设置的处理需要在 下载处理器 内部实现,因此不保证所有第三方处理器都支持。

FTP_PASSWORD

默认值:"guest"

Request meta 中没有 "ftp_password" 时,用于 FTP 连接的密码。

注意

paraphrasing RFC 1635,尽管通常使用密码“guest”或电子邮件地址进行匿名 FTP,但某些 FTP 服务器会明确要求用户的电子邮件地址,并且不允许使用“guest”密码登录。

注意

此设置的处理需要在 下载处理器 内部实现,因此不保证所有第三方处理器都支持。

FTP_USER

默认值:"anonymous"

Request meta 中没有 "ftp_user" 时,用于 FTP 连接的用户名。

注意

此设置的处理需要在 下载处理器 内部实现,因此不保证所有第三方处理器都支持。

GCS_PROJECT_ID

默认值:None

Google Cloud Storage 上存储数据时将使用的项目 ID。

ITEM_PIPELINES

默认值:{}

一个字典,包含要使用的 item pipeline 及其顺序。顺序值是任意的,但通常将其定义在 0-1000 的范围内。较低的顺序先于较高的顺序处理。

示例:

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

ITEM_PIPELINES_BASE

默认值:{}

一个字典,包含 Scrapy 中默认启用的 pipeline。您不应在项目中修改此设置,而应修改 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'

用于格式化日期/时间的字符串,是 %(asctime)s 占位符在 LOG_FORMAT 中的扩展。请参阅 Python datetime文档 以获取可用指令的完整列表。

注意

这是一个 日志设置

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,则它会显示负责日志输出的组件。

注意

这是一个 日志设置

LOG_VERSIONS

默认值: ["lxml", "libxml2", "cssselect", "parsel", "w3lib", "Twisted", "Python", "pyOpenSSL", "cryptography", "Platform"]

记录指定项的已安装版本。

一个项可以是任何已安装的Python包。

还支持以下特殊项

LOGSTATS_INTERVAL

默认值: 60.0

通过 LogStats 输出统计信息时,每次日志打印之间的间隔(秒)。

MEMDEBUG_ENABLED

默认值:False

是否启用内存调试。

MEMDEBUG_NOTIFY

默认值:[]

启用内存调试时,如果此设置不为空,内存报告将发送到指定地址;否则,报告将写入日志。

示例:

MEMDEBUG_NOTIFY = ['user@example.com']

MEMUSAGE_ENABLED

默认值:True

范围: scrapy.extensions.memusage.MemoryUsage

是否启用内存使用扩展。此扩展跟踪进程使用的峰值内存(并将其写入统计信息)。它还可以选择在超出内存限制时关闭Scrapy进程(参见 MEMUSAGE_LIMIT_MB)。

参见 内存使用扩展

MEMUSAGE_LIMIT_MB

默认值:0

范围: scrapy.extensions.memusage.MemoryUsage

在关闭Scrapy之前允许的最大内存量(以兆字节为单位)(如果 MEMUSAGE_ENABLEDTrue)。如果为零,则不执行检查。

参见 内存使用扩展

MEMUSAGE_CHECK_INTERVAL_SECONDS

默认值: 60.0

范围: scrapy.extensions.memusage.MemoryUsage

内存使用扩展 以固定的时间间隔检查当前内存使用情况,与 MEMUSAGE_LIMIT_MBMEMUSAGE_WARNING_MB 设置的限制进行比较。

这设置了这些间隔的长度,单位为秒。

参见 内存使用扩展

MEMUSAGE_WARNING_MB

默认值:0

范围: scrapy.extensions.memusage.MemoryUsage

在发送 memusage_warning_reached 信号之前允许的最大内存量(以兆字节为单位)(如果 MEMUSAGE_ENABLEDTrue)。如果为零,则不会发送信号。

参见 内存使用扩展

NEWSPIDER_MODULE

默认值: "<project name>.spiders" (备用: "")

使用 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不足的问题,请增加此值。

注意

这是一个 reactor 设置

REDIRECT_PRIORITY_ADJUST

默认值: +2

范围: scrapy.downloadermiddlewares.redirect.RedirectMiddleware

调整重定向请求相对于原始请求的优先级

  • 正的优先级调整(默认值)意味着更高的优先级。

  • 负的优先级调整意味着更低的优先级。

ROBOTSTXT_OBEY

默认值: True (备用: False)

如果启用,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文件中使用的用户代理。

SCHEDULER

默认值: 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

默认值: DownloaderAwarePriorityQueue

调度器使用的优先级队列类型。

另一个可用类型是 ScrapyPriorityQueue

DownloaderAwarePriorityQueue 在并行抓取许多不同域时比 ScrapyPriorityQueue 表现更好。

SCHEDULER_START_DISK_QUEUE

默认值: 'scrapy.squeues.PickleFifoDiskQueue'

调度器 用于 起始请求 的磁盘队列类型(参见 JOBDIR)。

有关可用选项,请参阅 SCHEDULER_DISK_QUEUE

使用 None"" 完全禁用这些独立队列,而是让起始请求与其它请求共享相同的队列。

注意

禁用独立的起始请求队列会使 起始请求顺序 变得不直观:起始请求将按顺序发送,直到达到 CONCURRENT_REQUESTS,然后剩余的起始请求将按相反顺序发送。

SCHEDULER_START_MEMORY_QUEUE

默认值: 'scrapy.squeues.FifoMemoryQueue'

调度器 用于 起始请求 的内存队列类型。

有关可用选项,请参阅 SCHEDULER_MEMORY_QUEUE

使用 None"" 完全禁用这些独立队列,而是让起始请求与其它请求共享相同的队列。

注意

禁用独立的起始请求队列会使 起始请求顺序 变得不直观:起始请求将按顺序发送,直到达到 CONCURRENT_REQUESTS,然后剩余的起始请求将按相反顺序发送。

SCRAPER_SLOT_MAX_ACTIVE_SIZE

默认值: 5_000_000

正在处理的响应数据的软限制(字节)。

当所有正在处理的响应大小总和超过此值时,Scrapy不会处理新的请求。

SPIDER_CONTRACTS

默认值:{}

一个字典,包含项目中已启用的爬虫契约,用于测试爬虫。更多信息请参阅 爬虫契约

SPIDER_CONTRACTS_BASE

默认值

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

一个字典,包含Scrapy中默认启用的Scrapy契约。您不应该在项目中修改此设置,而应修改 SPIDER_CONTRACTS。更多信息请参阅 爬虫契约

您可以通过将 None 分配给 SPIDER_CONTRACTS 中的类路径来禁用任何这些契约。例如,要禁用内置的 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 导入爬虫类时,如果存在任何 ImportErrorSyntaxError 异常,它将大声报错。但您可以通过设置 SPIDER_LOADER_WARN_ONLY = True 来选择静默此异常并将其转换为简单警告。

注意

这是一个 爬虫前设置

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

默认值: ["<project name>.spiders"] (备用: [])

Scrapy将查找爬虫的模块列表。

示例:

SPIDER_MODULES = ["mybot.spiders_prod", "mybot.spiders_dev"]

注意

这是一个 爬虫前设置

STATS_CLASS

默认值: 'scrapy.statscollectors.MemoryStatsCollector'

用于收集统计信息的类,该类必须实现 Stats Collector API

STATS_DUMP

默认值:True

爬虫完成时,将 Scrapy统计信息 (到Scrapy日志)转储。

更多信息请参阅: 统计信息收集

TELNETCONSOLE_ENABLED

默认值: True (当 TWISTED_REACTOR_ENABLEDFalse 时为 False

一个布尔值,指定 telnet控制台 是否启用(前提是其扩展也已启用)。

另请参阅

Telnet控制台

TEMPLATES_DIR

默认值: templates 目录,位于scrapy模块内部

使用 startproject 命令创建新项目以及使用 genspider 命令创建新爬虫时,查找模板的目录。

项目名称不得与 project 子目录中的自定义文件或目录名称冲突。

TWISTED_REACTOR_ENABLED

默认值:True

是否安装并使用Twisted reactor。

如果设置为 True,Scrapy将使用Twisted reactor,并根据 TWISTED_REACTOR 设置值在适当时候安装一个(例如,通过 命令行工具 运行)。这是使用Scrapy的传统模式。

如果设置为 False,Scrapy将直接使用asyncio事件循环,并且不会尝试安装或使用reactor。需要reactor的功能将不可用,但不需要reactor的Twisted API(包括 DeferredFailure)仍然可用。另一方面,与Twisted reactor相关的限制(例如无法在之前启动和停止过reactor的同一进程中启动reactor)将不再适用。此模式目前是实验性的,可能不适用于生产环境。第三方代码也可能不支持此模式。参见 在没有Twisted reactor的情况下使用Scrapy 以获取有关此模式的更多信息。

注意

这是一个 爬虫前设置

2.15.0 版本中新增。

TWISTED_REACTOR

默认值: "twisted.internet.asyncioreactor.AsyncioSelectorReactor"

给定 reactor 的导入路径。

如果尚未安装其他reactor,Scrapy将安装此reactor,例如在调用 scrapy CLI程序或使用 AsyncCrawlerProcess 类或 CrawlerProcess 类时。

如果您正在使用 AsyncCrawlerRunner 类或 CrawlerRunner 类,您还需要手动安装正确的reactor。您可以使用 install_reactor() 来实现。

scrapy.utils.reactor.install_reactor(reactor_path: str, event_loop_path: str | None = None) None[source]

安装具有指定导入路径的 reactor。如果启用了asyncio reactor,还会安装具有指定导入路径的asyncio事件循环。

如果已安装reactor,install_reactor() 没有效果。

AsyncCrawlerRunner 以及其他类似类,如果已安装的reactor与 TWISTED_REACTOR 设置不匹配,则会引发异常;因此,在项目文件和导入的第三方库中包含顶层 reactor 导入将导致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)

    async def start(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")

这会引发异常,变成

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)

    async def start(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")

如果此设置设置为 None,Scrapy将使用已安装的现有reactor(如果存在),或者安装Twisted为当前平台定义的默认reactor。

2.13版中更改: 默认值从 None 更改为 "twisted.internet.asyncioreactor.AsyncioSelectorReactor"

更多信息,请参阅 选择Reactor和GUI工具包集成

注意

这是一个 reactor 设置

URLLENGTH_LIMIT

默认值: 2083

范围: spidermiddlewares.urllength

允许抓取URL的最大URL长度。

此设置可以作为一种停止条件,以防URL长度不断增加(这可能是由目标服务器或您的代码中的编程错误引起的)。另请参阅 REDIRECT_MAX_TIMESDEPTH_LIMIT

使用 0 允许任意长度的URL。

默认值复制自 Microsoft Internet Explorer 最大URL长度,尽管此设置存在的理由不同。

USER_AGENT

默认值: "Scrapy/VERSION (+https://scrapy.net.cn)"

爬取时使用的默认User-Agent,除非被覆盖。此用户代理也由 RobotsTxtMiddleware 使用,如果 ROBOTSTXT_USER_AGENT 设置为 None 并且请求没有指定覆盖的User-Agent头。

WARN_ON_GENERATOR_RETURN_VALUE

默认值:True

启用后,如果基于生成器的回调方法(例如 parse)包含带有非 None 值的返回语句,Scrapy将发出警告。这有助于检测爬虫开发中的潜在错误。

禁用此设置可防止在运行时动态修改生成器函数源代码时可能发生的语法错误,跳过回调函数的AST解析,或在自动重新加载的开发环境中提高性能。

其他地方记录的设置:

以下设置在其他地方有记录,请查看每个具体案例以了解如何启用和使用它们。