Scrapy结构学习——settings配置
简介:
Settings允许自定义所有Scrapy组件的行为,包括核心,扩展,管道和爬虫本身。
设置的基础结构提供了键值映射的全局命名空间,代码可以使用它从中提取配置值。可以通过不同的机制来填充设置。
settings中的选项
settings参数有四个级别,优先级如下:
-
命令行选项(Command line Options)(最高优先级)
-
每个爬虫的设置
-
项目设定模块(Project settings module)
-
命令默认设定模块(Default settings per-command)
-
全局默认设定(Default global settings) (最低优先级)
命令行选项:
就是我们平时使用命令行scrapy crawl somespider时,可在命令行后面添加的自定义参数。
scrapy crawl myspider -s LOG_FILE=scrapy.log
每个爬虫的设置
爬虫可以定义自己的设置,这些设置将优先并覆盖项目。他们可以通过设置custom_settings
属性来实现。
from ..custom_settings import * class Spider1(CrawlSpider): name = "spider1" custom_settings = custom_settings_for_spider1 pass class Spider2(CrawlSpider): name = "spider2" custom_settings = custom_settings_for_spider2 custom_settings.py custom_settings_for_spider1 = { 'LOG_FILE': 'spider1.log', 'CONCURRENT_REQUESTS': 100, 'DOWNLOADER_MIDDLEWARES': { 'spider.middleware_for_spider1.Middleware': 667, }, 'ITEM_PIPELINES': { 'spider.mysql_pipeline_for_spider1.Pipeline': 400, }, } custom_settings_for_spider2 = { 'LOG_FILE': 'spider2.log', 'CONCURRENT_REQUESTS': 40, 'DOWNLOADER_MIDDLEWARES': { 'spider.middleware_for_spider2.Middleware': 667, }, 'ITEM_PIPELINES': { 'spider.mysql_pipeline_for_spider2.Pipeline': 400, }, }
项目设定模块
项目设置模块是Scrapy项目的标准配置文件,它将填充大多数自定义设置。对于标准的Scrapy项目,这意味着您将添加或更改settings.py
为您的项目创建的文件中的设置。 通常我们在一个项目目录下会有很多个spider,但是只有一个settings.py全局配置文件,在这个settings.py我们可以设置项目下所有爬虫的一些公共变量
每命令的默认设置
每个Scrapy工具命令都可以有自己的默认设置,覆盖全局默认设置。这些自定义命令设置default_settings在命令类的属性中指定。
默认全局设置
全局默认值位于scrapy.settings.default_settings 模块中。
项目设定模块解析
-
模块相关说明信息
# -*- coding: utf-8 -*- # Scrapy settings for new_center project # # For simplicity, this file contains only settings considered important or # commonly used. You can find more settings consulting the documentation: # # http://doc.scrapy.org/en/latest/topics/settings.html # http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html # http://scrapy.readthedocs.org/en/latest/topics/spider-middleware.html
-
项目名字和爬虫模块说明,引擎根据这个信息找到爬虫
BOT_NAME = 'new_center' # 项目名字 SPIDER_MODULES = ['new_center.spiders'] NEWSPIDER_MODULE = 'new_center.spiders'
-
浏览器的USER_AGENT,可以自定义伪装。
# Crawl responsibly by identifying yourself (and your website) on the user-agent #USER_AGENT = 'new_center (+http://www.yourdomain.com)'
-
是否遵守robots协议,默认是遵守的,可以改成False或将其注释
# Obey robots.txt rules ROBOTSTXT_OBEY = True
-
设置scrapy爬虫最大的并发请求数量,默认是16
# Configure maximum concurrent requests performed by Scrapy (default: 16) #CONCURRENT_REQUESTS = 32
-
设置对访问同一个网站进行请求的延时时间,默认情况下,Scrapy在两个请求间不等待一个固定的值,而是使用0.5到1.5之间的一个随机值。
# Configure a delay for requests for the same website (default: 0) # See http://scrapy.readthedocs.org/en/latest/topics/settings.html#download-delay # See also autothrottle settings and docs #DOWNLOAD_DELAY = 3 # The download delay setting will honor only one of:
-
设置对每个网站和每个IP的最大并发请求数量,两个最好只设置一个,如果都设置,则按照限制IP生效。
#CONCURRENT_REQUESTS_PER_DOMAIN = 16 #CONCURRENT_REQUESTS_PER_IP = 16
-
设置是否禁用cookie,目前默认是可用的,去掉注释则禁用
# Disable cookies (enabled by default) #COOKIES_ENABLED = False
-
设置是否可远程登录控制台,目前默认是可以的,去掉注释则禁用
# Disable Telnet Console (enabled by default) #TELNETCONSOLE_ENABLED = False
-
用来设置请求头,一般不用,因为请求头可以动态设置
# Override the default request headers: #DEFAULT_REQUEST_HEADERS = { # 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', # 'Accept-Language': 'en', #}
-
是否开启使用爬虫spider的中间件,默认不启用,解除注释后启用,后面的数字代表优先级,数字越小,优先级越高
# Enable or disable spider middlewares # See http://scrapy.readthedocs.org/en/latest/topics/spider-middleware.html #SPIDER_MIDDLEWARES = { # 'new_center.middlewares.NewCenterSpiderMiddleware': 543, #}
-
是否开启爬虫下载器的中间件,默认不启用,解除注释后启用
# Enable or disable downloader middlewares # See http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html #DOWNLOADER_MIDDLEWARES = { # 'new_center.middlewares.MyCustomDownloaderMiddleware': 543, #}
-
是否禁用爬虫扩展,默认禁用,解除注释后将None改成数字,如500,扩展的优先级一般不重要,因为他们并不相互依赖,多个扩展的value值可以写相同。
# Enable or disable extensions # See http://scrapy.readthedocs.org/en/latest/topics/extensions.html #EXTENSIONS = { # 'scrapy.extensions.telnet.TelnetConsole': None, #}
-
是否开启管道,默认关闭,开启則解除注释。是一个字典,默认为空,值任意,不过一般设置在0-1000之间,值越小优先级越高。
# Configure item pipelines # See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html #ITEM_PIPELINES = { # 'new_center.pipelines.NewCenterPipeline': 300, #}
-
设置自动限速,根据Scrapy服务器及爬取的网站的负载自动限制爬取速度,默认关闭,开启需解除注释。
# Enable and configure the AutoThrottle extension (disabled by default) # See http://doc.scrapy.org/en/latest/topics/autothrottle.html #AUTOTHROTTLE_ENABLED = True # 自动限速的开关 # The initial download delay #AUTOTHROTTLE_START_DELAY = 5 # 初始下载延时 # The maximum download delay to be set in case of high latencies #AUTOTHROTTLE_MAX_DELAY = 60 # 最大下载延时 # The average number of requests Scrapy should be sending in parallel to # each remote server #AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0 # Enable showing throttling stats for every response received: #AUTOTHROTTLE_DEBUG = False
-
启用和配置HTTP缓存
# Enable and configure HTTP caching (disabled by default) # See http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings #HTTPCACHE_ENABLED = True #HTTPCACHE_EXPIRATION_SECS = 0 #HTTPCACHE_DIR = 'httpcache' #HTTPCACHE_IGNORE_HTTP_CODES = [] #HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'
-
另外的重要的设置:
-
DEPTH_LIMIT:爬取网站最大的允许深度,默认值为0,表示没有限制;如果为1,表示只允许解析一层的url。
-
DOWNLOAD_TIMEOUT:下载器超时时间,默认180s.
-
LOG_ENABLED:是否启用logging,即日志文件,默认为True。
-
LOG_ENCODING:设置日志文件的编码,默认使用UTF_8。
-
LOG_LEVEL:对日志的内容进行等级的设置,有五个级别可以选择:
CRITICAL: 严重错误; ERROR:一般错误; WARNING:警告信息; INFO:一般信息; DEBUG:调试信息
-
PROXIES:设置代理;这不是scrapy内置的参数,但可以定义在setting模块,使用的时候可以导入。