settings.py常用设置解析
-
如何访问设定(How to access settings):
设定可以通过Crawler的 scrapy.crawler.Crawler.settings 属性进行访问。其由插件及中间件的 from_crawler 方法所传入: class MyExtension(object): @classmethod def from_crawler(cls, crawler): settings = crawler.settings if settings['LOG_ENABLED']: print "log is enabled!"
常用设置选项解析:
-
项目名称:BOT_NAME
默认: 'scrapybot' Scrapy项目实现的bot的名字(项目名称)。 这将用来构造默认 User-Agent,同时也用来log。 当您使用 startproject 命令创建项目时其也被自动赋值。
-
并发items: CONCURRENT_ITEMS
默认: 100 Item Processor(即 Item Pipeline) 同时处理(每个response的)item的最大值。
-
并发请求: CONCURRENT_REQUESTS
默认: 16 Scrapy downloader 并发请求(concurrent requests)的最大值。
-
单个网站并发请求限制: CONCURRENT_REQUESTS_PER_DOMAIN
默认: 8 对单个网站进行并发请求的最大值。
-
单个IP并发请求限制: CONCURRENT_REQUESTS_PER_IP
默认: 0 对单个IP进行并发请求的最大值。如果非0,则忽略 CONCURRENT_REQUESTS_PER_DOMAIN 设定, 使用该设定。 也就是说,并发限制将针对IP,而不是网站。 该设定也影响 DOWNLOAD_DELAY: 如果 CONCURRENT_REQUESTS_PER_IP 非0,下载延迟应用在IP而不是网站上。
-
item默认类:DEFAULT_ITEM_CLASS
默认: 'scrapy.item.Item' the Scrapy shell 中实例化item使用的默认类。
-
request默认请求头: DEFAULT_REQUEST_HEADERS
默认: { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'en', } Scrapy HTTP Request使用的默认header。由 DefaultHeadersMiddleware 产生。
-
爬取网站最大允许深度: DEPTH_LIMIT
默认: 0 爬取网站最大允许的深度(depth)值。如果为0,则没有限制。
-
根据深度调整request优先级: DEPTH_PRIORITY
默认: 0 整数值。用于根据深度调整request优先级。 如果为0,则不根据深度进行优先级调整。
-
最大深度数据:DEPTH_STATS
默认: True 是否收集最大深度数据。
-
详细深度数据: DEPTH_STATS_VERBOSE
默认: False 是否收集详细的深度数据。如果启用,每个深度的请求数将会被收集在数据中。
-
DNS内存缓存
默认: True 是否启用DNS内存缓存(DNS in-memory cache)。
-
下载中间件及其顺序: DOWNLOADER_MIDDLEWARES
默认: {} 保存项目中启用的下载中间件及其顺序的字典。按数字从小到大执行。
-
下载器数据:DOWNLOADER_STATS
默认: True 是否收集下载器数据。
-
下载延迟:DOWNLOAD_DELAY
默认: 0 下载器在下载同一个网站下一个页面前需要等待的时间。该选项可以用来限制爬取速度, 减轻服务器压力。同时也支持小数: DOWNLOAD_DELAY = 0.25 # 250 ms of delay 该设定影响(默认启用的) RANDOMIZE_DOWNLOAD_DELAY 设定。 默认情况下,Scrapy在两个请求间不等待一个固定的值, 而是使用0.5到1.5之间的一个随机值 * DOWNLOAD_DELAY 的结果作为等待间隔。 当 CONCURRENT_REQUESTS_PER_IP 非0时,延迟针对的是每个ip而不是网站。 另外您可以通过spider的 download_delay 属性为每个spider设置该设定。
-
下载处理器字典: DOWNLOAD_HANDLERS
默认: {} 保存项目中启用的下载处理器(request downloader handler)的字典。
-
下载器超时时间:DOWNLOAD_TIMEOUT
默认: 180 下载器超时时间(单位: 秒)。
-
用于检测过滤重复请求的类: DUPEFILTER_CLASS
默认: 'scrapy.dupefilter.RFPDupeFilter' 用于检测过滤重复请求的类。 默认的 (RFPDupeFilter) 过滤器基于 scrapy.utils.request.request_fingerprint 函数生成的请求指纹。
-
RFPDupeFilter记录重复请求: DUPEFILTER_DEBUG
默认: False 默认情况下, RFPDupeFilter 只记录第一次重复的请求。 设置 DUPEFILTER_DEBUG 为 True 将会使其记录所有重复的requests。
-
pipeline字典: ITEM_PIPELINES
默认: {} 保存项目中启用的pipeline及其顺序的字典。该字典默认为空,值(value)任意。 不过值(value)习惯设定在0-1000范围内。spider返回的items按照value值从小到大经过pipeline
-
是否启用日志: LOG_ENABLED
默认: True 是否启用logging。
-
日志默认编码:LOG_ENCODING
默认: 'utf-8' logging使用的编码。
-
日志文件名: LOG_FILE
默认: None logging输出的文件名。如果为None,则使用标准错误输出(standard error)。
-
log最低级别:LOG_LEVEL
默认: 'DEBUG' log的最低级别。可选的级别有: CRITICAL、 ERROR、WARNING、INFO、DEBUG。
-
随机下载延迟:RANDOMIZE_DOWNLOAD_DELAY
默认: True 如果启用,当从相同的网站获取数据时,Scrapy将会等待一个随机的值 (0.5到1.5之间的一个随机值 * DOWNLOAD_DELAY)。 该随机值降低了crawler被检测到(接着被block)的机会。某些网站会分析请求, 查找请求之间时间的相似性。 随机的策略与 wget --random-wait 选项的策略相同。 若 DOWNLOAD_DELAY 为0(默认值),该选项将不起作用。
-
request允许重定向的最大次数:REDIRECT_MAX_TIMES
默认: 20 定义request允许重定向的最大次数。超过该限制后该request直接返回获取到的结果。 对某些任务我们使用Firefox默认值。
-
robots.txt策略: ROBOTSTXT_OBEY
默认: False Scope: scrapy.contrib.downloadermiddleware.robotstxt 如果启用,Scrapy将会尊重 robots.txt策略。更多内容请查看 RobotsTxtMiddleware 。
-
爬取的调度器:SCHEDULER
默认: 'scrapy.core.scheduler.Scheduler' 用于爬取的调度器。 自定义: SCHEDULER = "smzdm_crawler.scrapy_redis.scheduler.Scheduler"
-
默认的USER_AGENT:USER_AGENT
默认: "Scrapy/VERSION (+http://scrapy.org)" 爬取的默认User-Agent,除非被覆盖。 ---
其他设置
MEMDEBUG_ENABLED
默认: False
是否启用内存调试(memory debugging)。
MEMDEBUG_NOTIFY
默认: []
如果该设置不为空,当启用内存调试时将会发送一份内存报告到指定的地址;否则该报告将写到log中。
样例:
MEMDEBUG_NOTIFY = ['user@example.com']
MEMUSAGE_ENABLED
默认: False
是否启用内存使用插件。当Scrapy进程占用的内存超出限制时,该插件将会关闭Scrapy进程, 同时发送email进行通知。
MEMUSAGE_LIMIT_MB
默认: 0
Scope: scrapy.contrib.memusage
在关闭Scrapy之前所允许的最大内存数(单位: MB)(如果 MEMUSAGE_ENABLED为True)。 如果为0,将不做限制。
MEMUSAGE_NOTIFY_MAIL
默认: False
达到内存限制时通知的email列表。
Example:
MEMUSAGE_NOTIFY_MAIL = ['user@example.com']
MEMUSAGE_REPORT
默认: False
每个spider被关闭时是否发送内存使用报告。
MEMUSAGE_WARNING_MB
默认: 0
在发送警告email前所允许的最大内存数(单位: MB)(如果 MEMUSAGE_ENABLED为True)。 如果为0,将不发送警告。
NEWSPIDER_MODULE
默认: ''
使用 genspider 命令创建新spider的模块。
样例:
NEWSPIDER_MODULE = 'mybot.spiders_dev'
判断设置是否已经启用
-
更改默认设置以后,执行scrapy时,控制台会打印log信息:Overridden settings,即表示修改成功
2016-03-11 15:12:30 [scrapy] INFO: Overridden settings: {'NEWSPIDER_MODULE': 'smzdm_crawler.spiders', 'CONCURRENT_REQUESTS_PER_DOMAIN': 16, 'SPIDER_MODULES': ['smzdm_crawler.spiders'], 'BOT_NAME': 'smzdm_crawler', 'SCHEDULER': 'smzdm_crawler.scrapy_redis.redis_scheduler.Scheduler', 'DOWNLOAD_DELAY': 0.25}
参考文章:scrapy 深度 setting设立