Scrapy : Settings

Settings

Scrapy settings 允许你自定义所有scrapy组件的行为,包括core,extensions,pipelines and spiders本身。

设置的基础结构提供了键-值映射的全局命名空间,代码可以从中获取配置值。设置可以通过不同的机制填充,在下面描述。

设置也是来选择当前活跃scrapy项目的机制(在你有很多的情况下)

For a list of available built-in settings see: Built-in settings reference.

Designating the settings

当你使用scrapy时,你要告诉它你要使用那个设置,你可以通过设置环境变量 SCRAPY_SETTINGS_MODULE

这个值应该是python路径语法,例如myproject.settings。注意settings模块应该在python导入搜索路径上。import search path.

Populating the settings

settings可以使用不同机制填充,每一个都有不同的优先权,这是从高到低排序

  1. Command line options (most precedence)
  2. Settings per-spider
  3. Project settings module
  4. Default settings per-command
  5. Default global settings (less precedence)

填充设置资源是在内部进行。但是可以调用API进行手动处理,See the Settings API topic for reference

These mechanisms are described in more detail below.

1. Command line options

通过命令行提供参数优先级最高,会重新其他操作。你可以精确的重写一个或更多设置,使用-s(or --set)命令行操作。

Example:

scrapy crawl myspider -s LOG_FILE=scrapy.log

2. Settings per-spider

spider 可以定义他们自己的设置,获得优先权并重写项目。他们可以通过设置custom_settings属性来实现。

class MySpider(scrapy.Spider):
    name = 'myspider'

    custom_settings = {
        'SOME_SETTING': 'some value',
    }

3. Project settings module

项目设置模块是标准的配置文件,大多数自定义的设置就是在这里填充。对于标准scrapy 项目这意味着你要增加或改变设置要在setting.py 文件里。

4. Default settings per-command

每一个scrapy 工具命令都有自己默认的设置,这回重写全局默认的设置。这些自定义的命令设置被指定在command类的default_settings属性里。

5. Default global settings

全局默认值位于scrapy.setting.settings.default_settings模块里,说明参考 Built-in settings reference

How to access settings

在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提供的一种方法,提取设置按你想要的格式,避免格式错误。

Rationale for setting names

设置名通常是组件配置的前缀。例如,对虚拟robots.txt扩展的设置名应该是ROBOTSTXT_ENABLED, ROBOTSTXT_OBEY ,ROBOTSTXT_CACHEDIR.

Built-in settings reference

这有可用设置的列表,以字母顺序排序,带有他们默认的值和他们应用的范围。

可用的范围,展示了设置可用的地方,如果与任何特别的组件相连,这种情况下将展示这个组件的模块,通常是扩展,中间件或管道,这也意味着这些组件必须可用才可以让设置生效。

AWS_ACCESS_KEY_ID

Default: None

需要访问Amazon Web services的代码使用的AWS访问键,例如 S3 feed storage backend.

AWS_SECRET_ACCESS_KEY

Default: None

需要访问 Amazon Web services,的AWS密匙,例如 S3 feed storage backend.

AWS_ENDPOINT_URL

Default: None

用于类似S3 存储的端点url,例如Minio or s3.secality

AWS_USE_SSL

Default: None

如果你想禁用SSL来链接来使用S3 或 类似S3 的存储就使用这个选择,默认使用SSL。

AWS_VERIFY

Default: None

验证SSL与S3 或类似S3的存储之间的SSL链接,默认发生SSL的检验。

AWS_REGION_NAME

Default: None

与AWS客户端相关联的区域的名称。

BOT_NAME

Default: 'scrapybot'

被这个scrapy项目应用的bot名(也是作为项目名)。这个名也会用来日志记录。

It’s automatically populated with your project name when you create your project with the startproject command.

CONCURRENT_ITEMS

Default: 100

在并行的item pipelines中同时处理item(每个响应)的最大数量。

CONCURRENT_REQUESTS

Default: 16

scrapy downloader 同时执行(即并发)的请求的最大数量。

CONCURRENT_REQUESTS_PER_DOMAIN

Default: 8

对每个单一域名同时执行(即并发)请求的最大数量。

See also: AutoThrottle extension and its AUTOTHROTTLE_TARGET_CONCURRENCY option.

CONCURRENT_REQUESTS_PER_IP

Default: 0

对任何单一IP同时(即并发)执行请求的最大数量。如果不是0, CONCURRENT_REQUESTS_PER_DOMAIN 设置就被忽略,这个来代替,也就是说是,并发的限制应用到了每个IP,而不是每个域名。

这个设置也影响 DOWNLOAD_DELAY and AutoThrottle extension:如果CONCURRENT_REQUEST_PER_IP不是0,下载延迟会强制应用到每个IP,而不是域名。

DEFAULT_ITEM_CLASS

Default: 'scrapy.item.Item'

在scrapy shell中实例化itmes 的类。

DEFAULT_REQUEST_HEADERS

Default:

{
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'en',
}

scrapy HTTP 请求的默认请求头。在DefaultHeadersMiddleware中填充。

DEPTH_LIMIT

Default: 0

Scope: scrapy.spidermiddlewares.depth.DepthMiddleware

对一个网站允许的最大抓取深度,如果是0,就不会加上限制。

DEPTH_PRIORITY

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.相比调整方式是相反的。

DEPTH_STATS_VERBOSE

Default: False

Scope: scrapy.spidermiddlewares.depth.DepthMiddleware

是否收集冗长的深度统计,如果可用,每个深度请求的数量会收集在统计资料中。

DNSCACHE_ENABLED

Default: True

是否启用DNS缓存

DNSCACHE_SIZE

Default: 10000

DNS缓存大小

DNS_RESOLVER

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设置。

DNS_TIMEOUT

Default: 60

处理DNS查询的超时时间,以秒为单位,支持浮点数。

DOWNLOADER

Default: 'scrapy.core.downloader.Downloader'

使用的下载器,

DOWNLOADER_HTTPCLIENTFACTORY

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’

DOWNLOADER_CLIENTCONTEXTFACTORY

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)

DOWNLOADER_CLIENT_TLS_CIPHERS

Default: 'DEFAULT'

使用这个设置来定制默认HTTP/1.1下载器使用的TLS/SSL暗号

这个设置应该包含OpenSSL cipher list format格式的字符串,这些暗号将用作客户暗号。改变这个设置是访问某个HTTPS网站而必要的,例如,你可能需要使用 'DEFAULT:!DH' ,在DH参数弱的网站或如果网站需要,启用特别的暗号不包含DEFAULT。

DOWNLOADER_CLIENT_TLS_METHOD

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) # 不推荐

DOWNLOADER_CLIENT_TLS_VERBOSE_LOGGING

Default: False

设置这个为True,将启用DEBUG级别的消息关于建立HTTPS连接后的TLS连接参数。这种信息加载依靠OpenSSL and pyOpenSSL的版本。

这个设置仅用于默认的DOWNLOADER_CLIENTCONTEXTFACTORY.

DOWNLOADER_MIDDLEWARES

Default:: {}

一个字典包含了你的项目中启用的下载器中间件,和他们的命令, For more info see Activating a downloader middleware.

DOWNLOADER_MIDDLEWARES_BASE

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

DOWNLOADER_STATS

Default: True

是否启用下载器统计信息收集。

DOWNLOAD_DELAY

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 爬虫属性。

DOWNLOAD_HANDLERS

Default: {}

一个字典包含你的项目中可用的请求下载处理器。See DOWNLOAD_HANDLERS_BASE for example format.

DOWNLOAD_HANDLERS_BASE

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,
}

DOWNLOAD_TIMEOUT

Default: 180

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

Note

这个超时可用设置在每个爬虫中使用download_timeout 爬虫属性,并使用 download_timeout Request.meta key 给每个请求设置超时。

DOWNLOAD_MAXSIZE

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.

DOWNLOAD_WARNSIZE

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.

DOWNLOAD_FAIL_ON_DATALOSS

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])错误会生成。

DUPEFILTER_CLASS

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是个跟好的选择

DUPEFILTER_DEBUG

Default: False

默认 RFPDupeFilter 只会记录第一个重复请求,设置这个为true ,可以记录所有重复请求。

EDITOR

Default: vi (on Unix systems) or the IDLE editor (on Windows)

使用edit命令编辑爬虫是使用的编辑器。另外如果EDITOR环境变量被设置,edit命令会覆盖默认的

EXTENSIONS

Default:: {}

字典包含了你的项目中可用的扩展,和他们的顺序。

EXTENSIONS_BASE

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_TEMPDIR

Feed Temp dir允许你设置一个自定义的文件夹来保存临时抓取的文件,在上载 FTP feed storage and Amazon S3之前。

FTP_PASSIVE_MODE

Default: True

是否使用被动模式在发起FTP传输的时候。

FTP_PASSWORD

Default: "guest"

FTP连接使用的密码,当Request meta 没有ftp_password时

Note

用RFC 1635解释,即使通常使用密码guest 或一个人的邮件地址用于匿名FTP,但一些FTP服务器明确要求用户的邮箱地址,不允许使用guest 登录。

FTP_USER

Default: "anonymous"

FTP连接时使用的用户名,当request meta没有ftp_user时。

ITEM_PIPELINES

Default: {}

字典包含了item pipeline来用,和他们的顺序,其他值是任意的,但是通常在1-1000,低命令优先处理。

Example:

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

ITEM_PIPELINES_BASE

Default: {}

字典包含了内置的管道,你不要修改这个设置,而是去修改上面那个。

LOG_ENABLED

Default: True

Whether to enable logging.# 是否启用日志。

LOG_ENCODING

Default: 'utf-8'

日志使用的编码

LOG_FILE

Default: None

日志输出的文件名,如果是none,就使用标准的错误。

LOG_FORMAT

Default: '%(asctime)s [%(name)s] %(levelname)s: %(message)s'

字符串来格式化日志消息。参考 Python logging documentation 获得所有占位符。

LOG_DATEFORMAT

Default: '%Y-%m-%d %H:%M:%S'

字符串格式化时间日期的,在LOG_FORMAT中扩展了%(asctime)s占位符,Refer to the Python datetime documentation for the whole list of available directives

LOG_FORMATTER

Default: scrapy.logformatter.LogFormatter

类用来使用不同的操作格式化日志消息。 formatting log messages

LOG_LEVEL

Default: 'DEBUG'

记录的最小水准,可用的有CRITICAL, ERROR, WARNING, INFO, DEBUG. For more info see Logging.

LOG_STDOUT

Default: False

如果是True, 你的过程中所有的标准输出(和错误)都会重定向到日志里,例如,如果你print(‘hello’),他就会出现在scrapy 日志里。

LOG_SHORT_NAMES

Default: False

如果是True ,日志就仅包含跟路径,如果将其设置为False , 就展示复制日志输出的组件。

LOGSTATS_INTERVAL

Default: 60.0

被logstats统计的每个日志输出的间隔(秒)

MEMDEBUG_ENABLED

Default: False

是否使用内存调试

MEMDEBUG_NOTIFY

Default: []

当内存调试可用,一个内存报告就好送给指定的地址,如果这个设置不是空,否则这个报告会写给日志。

Example:

MEMDEBUG_NOTIFY = ['user@example.com']

MEMUSAGE_ENABLED

Default: True

Scope: scrapy.extensions.memusage

是否启用内存用法扩展,这个扩展保持对进程使用的内存峰值的跟踪(将其写入统计信息里)。还可以选择的关闭scrapy进程,当超过内存限制时((see MEMUSAGE_LIMIT_MB),并且发生时通知邮件(see MEMUSAGE_NOTIFY_MAIL).

See Memory usage extension.

MEMUSAGE_LIMIT_MB

Default: 0

Scope: scrapy.extensions.memusage

再关闭scrapy时(f MEMUSAGE_ENABLED is True)允许的最大内存(MB)。如果是0,就不执行检测

See Memory usage extension.

MEMUSAGE_CHECK_INTERVAL_SECONDS

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.

MEMUSAGE_NOTIFY_MAIL

Default: False

Scope: scrapy.extensions.memusage

邮箱的列表,在达到限制时通知。

Example:

MEMUSAGE_NOTIFY_MAIL = ['user@example.com']

See Memory usage extension.

MEMUSAGE_WARNING_MB

Default: 0

Scope: scrapy.extensions.memusage

在发送警告邮件通知超过的最大内存,如果是0,就不会执行警告。

NEWSPIDER_MODULE

Default: ''

使用genspider命令创建新爬虫时的模块

Example:

NEWSPIDER_MODULE = 'mybot.spiders_dev'

RANDOMIZE_DOWNLOAD_DELAY

Default: True

如果可用,scrapy在从同一个网站获取请求时会等待一个随机的时间(between 0.5 * DOWNLOAD_DELAY and 1.5 * DOWNLOAD_DELAY)

这种随机化减少了爬虫被检测的机会(然后被阻止),网站会分析请求来找到同时间请求在统计上重要的相似部分。

随机化策略跟 wget --random-wait 的使用的选项相同。

如果是0(默认)这个选项就没用了

REACTOR_THREADPOOL_MAXSIZE

Default: 10

Twisted Reactor 线程池最大的限制。这是通用的多用途线程池,被scrapy多个组件使用。线程DNS解析器,BlockingFeedStorage, S3FilesStore 是其中一些的名字。增加这个值,如果遇到因不足造成的IO阻塞

REDIRECT_PRIORITY_ADJUST

Default: +2

Scope: scrapy.downloadermiddlewares.redirect.RedirectMiddleware

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

优先级为正意味着更高的优先级
负就是更低的

RETRY_PRIORITY_ADJUST

Default: -1

Scope: scrapy.downloadermiddlewares.retry.RetryMiddleware

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

  • a positive priority adjust means higher priority.
  • a negative priority adjust (default) means lower priority.

ROBOTSTXT_OBEY

Default: False

Scope: scrapy.downloadermiddlewares.robotstxt

如果启用,scrapy会遵守机器人协议,For more information see RobotsTxtMiddleware.

Note

虽然由于历史原因默认值是False,但默认情况下这个选项在使用scrapy startproject命令生成settings.py文件时是启用的。

ROBOTSTXT_PARSER

Default: 'scrapy.robotstxt.ProtegoRobotParser'

用来解析robots.txt文件的解释器后端,For more information see RobotsTxtMiddleware.

ROBOTSTXT_USER_AGENT

Default: None

在robots.txt文件中用来匹配的user agent 字符串,如果是None,与请求一起发送的请求头或USER_AGENT设置(按此顺序)将用于确定在robots.txt文件使用的用户代理。

SCHEDULER

Default: 'scrapy.core.scheduler.Scheduler'
抓取时使用的调度器

SCHEDULER_DEBUG

Default: False

设置这个为True会记录关于请求调度器的调试信息,如果请求不能序列化成磁盘,则当前的日志仅记录一次。统计计数器(可调度/不可序列化)跟踪发生的次数。

Example entry in logs:

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

Default: 'scrapy.squeues.PickleLifoDiskQueue'

调度器使用的磁盘对列的种类,其他可用的有:

SCHEDULER_MEMORY_QUEUE

Default: 'scrapy.squeues.LifoMemoryQueue'

调度器使用的内存对列的种类,其他可用的有:

SCHEDULER_PRIORITY_QUEUE

Default: 'scrapy.pqueues.ScrapyPriorityQueue'

使用的优先级对列种类。其他可用的有:scrapy.pqueues.DownloaderAwarePriorityQueue.

scrapy.pqueues.DownloaderAwarePriorityQueue比默认的更好使当你要平行抓取许多不同域名时,但是当前的scrapy.pqueues.DownloaderAwarePriorityQueue 不能和 CONCURRENT_REQUESTS_PER_IP一起使用。

SCRAPER_SLOT_MAX_ACTIVE_SIZE

New in version 2.0.

Default: 5_000_000

处理的响应数据的软限制(字节单位)

当所有正在处理的请求大小加起来超过了这个限制,scrapy就不会在处理新的请求。

SPIDER_CONTRACTS

Default:: {}

字典包含了你项目中可用的合同,用来测试爬虫,For more info see Spiders Contracts

SPIDER_CONTRACTS_BASE

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,
}

SPIDER_LOADER_CLASS

Default: 'scrapy.spiderloader.SpiderLoader'
用来加载爬虫的类,必须实现SpiderLoader API.

SPIDER_LOADER_WARN_ONLY

New in version 1.3.3.

Default: False

默认,当scrapy尝试从 SPIDER_MODULES导入爬虫类时,如果出现任何ImportError例外会强烈报错,,,但是你可以选择安静这个例外并改变成一个单一的警告,通过设置为True。

Note

一些scrapy 命令已经已经是这个设置为True了(即只会对问题警告而不是报错)因为他们不用加载爬虫类 scrapy runspider, scrapy settings, scrapy startproject, scrapy version.

SPIDER_MIDDLEWARES

Default:: {}

字典包含你的项目可用的中间件,和他们的顺序For more info see Activating a spider middleware.

SPIDER_MIDDLEWARES_BASE

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,
}

默认中间件和他们的顺序,低顺序靠近引擎,高的靠近爬虫。

SPIDER_MODULES

Default: []

在这里scrapy寻找爬虫的模块列表

Example:

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

STATS_CLASS

Default: 'scrapy.statscollectors.MemoryStatsCollector'

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

STATS_DUMP

Default: True

将scrapy统计信息保存到scrapy日志里,一旦爬虫完成了

For more info see: Stats Collection.

STATSMAILER_RCPTS

Default: [] (empty list)

爬虫完成抓取后发送scrapy统计信息。See StatsMailer for more info。

TELNETCONSOLE_ENABLED

Default: True

布尔值指定telnet console是否启用(提供他的扩展也启用)

TEMPLATES_DIR

Default: templates dir inside scrapy module

在使用startproject and genspider命令时寻找的范本目录。

项目名必须和传统文件或在project子目录的目录名不冲突

TWISTED_REACTOR

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.

URLLENGTH_LIMIT

Default: 2083

Scope: spidermiddlewares.urllength

允许榨取的最大URL长度,更多信息参考 https://boutell.com/newfaq/misc/urllength.html

USER_AGENT

Default: "Scrapy/VERSION (+https://scrapy.org)"

抓取时使用的默认user-agent,除非被重写了,如果 ROBOTSTXT_USER_AGENT设置是none并且没有为请求指定user-agent头, RobotsTxtMiddleware也会用这个。

Settings documented elsewhere:

以下都记录在别的地方,请检查每个的例子来了解怎样启用和使用他们。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值