Scrapy设置

Scrapy组件的行为可以使用Scrapy设置进行修改。如果您有多个Scrapy项目,这些设置还可以选择当前处于活动状态的Scrapy项目。

指定设置

您必须通知Scrapy您在取消网站时使用的设置。为此,应该使用环境变量 SCRAPY_SETTINGS_MODULE ,其值应该在Python路径语法中。

填充设置

下表显示了可以填充设置的一些机制 -

序号 机制与描述
1 命令行选项 在这里,通过覆盖其他选项来传递参数的优先级最高。-s用于覆盖一个或多个设置。
scrapy crawl myspider -s LOG_FILE = scrapy.log
2 每个蜘蛛的设置 蜘蛛可以拥有自己的设置,通过使用属性custom_settings覆盖项目。
class DemoSpider(scrapy.Spider):
   name = 'demo'  
   custom_settings = {
      'SOME_SETTING': 'some value',
   }
3 项目设置模块 在这里,您可以填充自定义设置,例如添加或修改settings.py文件中的设置。
4 每个命令的默认设置 每个Scrapy工具命令都会在default_settings属性中定义自己的设置,以覆盖全局默认设置。
5 **默认全局设置** 这些设置可在scrapy.settings.default_settings模块中找到。

访问设置

它们通过self.settings可用,并在初始化后设置在基本蜘蛛中。

以下示例演示了这一点。

class DemoSpider(scrapy.Spider):
   name = 'demo'
   start_urls = ['http://example.com']  
   def parse(self, response):
      print("Existing settings: %s" % self.settings.attributes.keys())

要在初始化蜘蛛之前使用设置,您必须在蜘蛛的 init() 方法中覆盖 _fromcrawler 方法。您可以通过传递给 _fromcrawler 方法的属性 scrapy.crawler.Crawler.settings 来访问设置。

以下示例演示了这一点。

class MyExtension(object):
   def __init__(self, log_is_enabled = False):
      if log_is_enabled:
         print("Enabled log")
         @classmethod
   def from_crawler(cls, crawler):
      settings = crawler.settings
      return cls(settings.getbool('LOG_ENABLED'))

设置名称的理由

设置名称作为前缀添加到它们配置的组件。例如,对于robots.txt扩展名,设置名称可以是ROBOTSTXT_ENABLED,ROBOTSTXT_OBEY,ROBOTSTXT_CACHEDIR等。

内置设置参考

下表显示了Scrapy的内置设置:

Sr.No 设置和说明
1 AWS_ACCESS_KEY_ID 它用于访问亚马逊网络服务。 默认值:无
2 AWS_SECRET_ACCESS_KEY 它用于访问亚马逊网络服务。 默认值:无
3 BOT_NAME 它是可以用于构建User-Agent的bot的名称。 默认值:'scrapybot'
4 CONCURRENT_ITEMS 项目处理器中用于并行处理的最大现有项目数。 默认值:100
5 CONCURRENT_REQUESTS Scrapy下载器执行的最大现有请求数。 默认值:16
6 CONCURRENT_REQUESTS_PER_DOMAIN 对于任何单个域同时执行的现有请求的最大数量。 默认值:8
7 CONCURRENT_REQUESTS_PER_IP 与任何单个IP同时执行的现有请求的最大数量。 默认值:0
8 DEFAULT_ITEM_CLASS 这是一个用来表示项目的类。 默认值:'scrapy.item.Item'
9 DEFAULT_REQUEST_HEADERS 它是用于Scrapy的HTTP请求的默认标题。 默认值 -
{  
   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'en',  
}
10 DEPTH_LIMIT 蜘蛛抓取任何网站的最大深度。 默认值:0
11 DEPTH_PRIORITY 它是一个整数,用于根据深度改变请求的优先级。 默认值:0
12 DEPTH_STATS 它说明是否收集深度统计信息。 默认值:True
13 DEPTH_STATS_VERBOSE 此设置启用时,请求的数量收集在每个详细深度的统计信息中。 默认值:False
14 DNSCACHE_ENABLED 它用于在内存缓存中启用DNS。 默认值:True
15 DNSCACHE_SIZE 它定义了内存缓存中DNS的大小。 默认值:10000
16 DNS_TIMEOUT 它用于设置DNS处理查询的超时时间。 默认值:60
17 DOWNLOADER 它是用于抓取过程的下载程序。 默认值:'scrapy.core.downloader.Downloader'
18 DOWNLOADER_MIDDLEWARES 这是一本控制下载中间件及其订单的字典。 默认值: {}
19 DOWNLOADER_MIDDLEWARES_BASE 这是一个保存下载器中间件的字典,默认情况下是启用的。 默认值 -
{ 'scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware': 100, }
20 DOWNLOADER_STATS 此设置用于启用下载器统计信息。 默认值:True
21 DOWNLOAD_DELAY 它定义下载器从网站下载页面之前的总时间。 默认值:0
22 DOWNLOAD_HANDLERS 这是一个包含下载处理程序的字典。 默认值: {}
23 DOWNLOAD_HANDLERS_BASE 它是一个包含下载处理程序的字典,默认情况下处于启用状态。 默认值 -
{ 'file': 'scrapy.core.downloader.handlers.file.FileDownloadHandler', }
24 DOWNLOAD_TIMEOUT 下载器在超时之前等待的总时间。 默认值:180
25 DOWNLOAD_MAXSIZE 这是下载器下载的最大响应大小。 默认值:1073741824(1024MB)
26 DOWNLOAD_WARNSIZE 它定义了下载器发出警告的响应大小。 默认值:33554432(32MB)
27 DUPEFILTER_CLASS 它是用于检测和过滤重复请求的类。 默认值:'scrapy.dupefilters.RFPDupeFilter'
28 DUPEFILTER_DEBUG 此设置在设置为true时记录所有重复过滤器。 默认值:False
29 编辑 它用于使用编辑命令编辑蜘蛛。 默认值:取决于环境
三十 EXTENSIONS 它是一个在项目中启用了扩展的字典。 默认值: {}
31 EXTENSIONS_BASE 这是一个内置扩展名的字典。 默认值:{'scrapy.extensions.corestats.CoreStats':0,}
32 FEED_TEMPDIR 它是用于设置可以存储抓取工具临时文件的自定义文件夹的目录。
33 ITEM_PIPELINES 这是一个有管道的字典。 默认值: {}
34 LOG_ENABLED 它定义了是否启用日志记录。 默认值:True
35 LOG_ENCODING 它定义了用于记录的编码类型。 默认值:'utf-8'
36 LOG_FILE 它是用于记录输出的文件的名称。 默认值:无
37 LOG_FORMAT 它是一个字符串,可以使用该字符串格式化日志消息。 默认值:'%(asctime)s [%(name)s]%(levelname)s:%(message)s'
38 LOG_DATEFORMAT 它是一个使用哪个日期/时间格式化的字符串。 默认值:'%Y-%m-%d%H:%M:%S'
39 LOG_LEVEL 它定义了最低日志级别。 默认值:'DEBUG'
40 LOG_STDOUT 此设置如果设置为true,则所有过程输出都将显示在日志中。 默认值:False
41 MEMDEBUG_ENABLED 它定义了是否启用内存调试。 默认值:False
42 MEMDEBUG_NOTIFY 它定义了启用内存调试时发送到特定地址的内存报告。 默认值: []
43 MEMUSAGE_ENABLED 它定义了当Scrapy进程超过内存限制时是否启用内存使用。 默认值:False
44 MEMUSAGE_LIMIT_MB 它定义了允许的最大内存限制(以兆字节为单位)。 默认值:0
45 MEMUSAGE_CHECK_INTERVAL_SECONDS 它用于通过设置间隔的长度来检查当前的内存使用情况。 默认值:60.0
46 MEMUSAGE_NOTIFY_MAIL 当内存达到限制时,它用于通知电子邮件列表。 默认值:False
47 MEMUSAGE_REPORT 它定义了是否在关闭每个蜘蛛时发送内存使用情况报告。 默认值:False
48 MEMUSAGE_WARNING_MB 它定义了发送警告之前允许的总内存。 默认值:0
49 NEWSPIDER_MODULE 它是一个使用genspider命令创建新蜘蛛的模块。 默认值: ''
50 RANDOMIZE_DOWNLOAD_DELAY 它定义了Scrapy等待下载来自站点的请求的随机时间。 默认值:True
51 REACTOR_THREADPOOL_MAXSIZE 它定义了反应器线程池的最大尺寸。 默认值:10
52 REDIRECT_MAX_TIMES 它定义了请求可以重定向的次数。 默认值:20
53 REDIRECT_PRIORITY_ADJUST 此设置在设置时调整请求的重定向优先级。 默认值:+2
54 RETRY_PRIORITY_ADJUST 此设置在设置时会调整请求的重试优先级。 默认值:-1
55 ROBOTSTXT_OBEY 当设置为 _true_ 时,Scrapy会遵守robots.txt策略。 默认值:False
56 SCHEDULER 它定义了用于抓取目的的调度器。 默认值:'scrapy.core.scheduler.Scheduler'
57 SPIDER_CONTRACTS 这是一个有蜘蛛合同来测试蜘蛛的项目字典。 默认值: {}
58 SPIDER_CONTRACTS_BASE 它是一个持有Scrapy合约的字典,默认情况下在Scrapy中启用。 默认值 -
{
   'scrapy.contracts.default.UrlContract' : 1,
   'scrapy.contracts.default.ReturnsContract': 2,
}
59 SPIDER_LOADER_CLASS 它定义了一个实现 _SpiderLoader API_ 来加载蜘蛛的类。 默认值:'scrapy.spiderloader.SpiderLoader'
60 SPIDER_MIDDLEWARES 这是一本持有蜘蛛中间件的字典。 默认值: {}
61 SPIDER_MIDDLEWARES_BASE 这是一个持有蜘蛛中间件的字典,默认情况下在Scrapy中启用。 默认值 -
{
   'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware': 50,
}
62 SPIDER_MODULES 这是Scrapy将寻找的包含蜘蛛的模块列表。 默认值: []
63 STATS_CLASS 它是一个实现 _Stats Collector_ API来收集统计数据的类。 默认值:'scrapy.statscollectors.MemoryStatsCollector'
64 STATS_DUMP 将此设置设置为true时,会将统计信息转储到日志中。 默认值:True
65 STATSMAILER_RCPTS 蜘蛛完成抓取后,Scrapy会使用此设置发送统计信息。 默认值: []
66 TELNETCONSOLE_ENABLED 它定义了是否启用telnetconsole。 默认值:True
67 TELNETCONSOLE_PORT 它为telnet控制台定义了一个端口。 默认值:[6023,6073]
68 TEMPLATES_DIR 它是一个包含可在创建新项目时使用的模板的目录。 默认值:scrapy模块内的templates目录
69 URLLENGTH_LIMIT 它定义了爬网URL允许使用的URL的最大长度限制。 默认值:2083
70 USER_AGENT 它定义了在爬网时使用的用户代理。 默认值:“Scrapy / VERSION(+ http://scrapy.org)”

下一章:Scrapy 异常

Scrapy异常:不规则事件被称为例外。在Scrapy中,由于诸如缺少配置,从项目管道中删除项目等原因而引发异常。以下是Scrapy中提及的异常及其应用程序的列表。DropItem物品管道利用此异常来停止在任何阶段处理物品。它可以写成:ex ...