😃
Scrapy设定(settings)提供了定制Scrapy组件的方法。
你可以控制包括核心(core),插件(extension),pipeline及spider组件。
设定为代码提供了提取以key-value映射的配置值的的全局命名空间(namespace)。
主要记录一下常用的几个内置的配置文件,以便以后好查询。标记重要的,那一定很重要
-
ROBOTSTXT_OBEY = True (重要)
是否遵守机器人协议,默认是True,开始爬虫的时候,记得改成 False
-
CONCURRENT_ITEMS
Item Processor(即 Item Pipeline) 同时处理(每个response的)item的最大值。默认是 100,刚创建的项目中,settings文件是没有的。
如需使用,在settings文件中加上即可
-
CONCURRENT_REQUESTS
Scrapy downloader 并发请求(concurrent requests)的最大值。默认是 16
-
CONCURRENT_REQUESTS_PER_DOMAIN
对单个网站进行并发请求的最大值。 默认值是 16
-
CONCURRENT_REQUESTS_PER_IP
能够被单个IP处理的并发请求数,默认值0,代表无限制,需要注意,如果不为零,那CONCURRENT_REQUESTS_PER_DOMAIN将被忽略,即并发数的限制是按照每个IP来计算,而不是每个域名
-
DOWNLOAD_DELAY (重要)
如果没有开启智能限速,这个值就代表一个规定死的值,代表对同一网址延迟请求的秒数。一般是防止IP被封的有效手段之一。对了,默认值是 0
-
DOWNLOAD_TIMEOUT (重要)
下载器超时时间(单位: 秒)。默认值180秒,时间也太特么的长了,当时使用IP代理池,忘记重设超时时间,导致爬取效率极低。所以,一定要记得设置超时时间,一般设置5到10秒。
-
COOKIES_ENABLED (重要)
是否支持cookie,cookiejar进行操作cookie,默认开启,对于某些网站,需要开启cookie才能爬取,有些需要关闭。需要具体分析。
-
DEFAULT_REQUEST_HEADERS
Scrapy HTTP Request使用的默认header。由 DefaultHeadersMiddleware 产生。可以用来修改UA,不过我很少在这里修改。
-
USER_AGENT(重要)
客户端User-Agent请求头,一定要记得改,默认的请求头是个什么玩意。
-
两个中间件,一个是 DOWNLOADER_MIDDLEWARES,另一个是 SPIDER_MIDDLEWARES
关于DOWNLOADER_MIDDLEWARES 的用法可以参考我的另一篇博客 点这
为什么我只说了下载器中间件?因为我TMD至今还没使用过爬虫中间件
你可以在这里添加你自己定义的中间件,也可以禁用scrapy内置的中间件。
-
ITEM_PIPELINES (重要)
保存项目中启用的pipeline及其顺序的字典。该字典默认为空,值(value)任意。 不过值(value)习惯设定在0-1000范围内。自己写的PIPELINE一定要记得添加进去噢
-
关于日志的常用配置
- LOG_ENABLED 也就是要不要开启日志的意思, 默认是True
- LOG_ENCODING 日志的编码,默认是 utf-8
- LOG_FILE 日志的文件,默认是None,也就是输出到控制台
- LOG_LEVEL 日志的级别。默认是 DEBUG,可选的级别有: CRITICAL、 ERROR、WARNING、INFO、DEBUG。DEBUG为最低级别,日志输出DEBUG及以上级别的信息
-
REDIRECT_ENABLED 与 REDIRECT_MAX_TIMES (重要)
是否启用Redirect中间件,及其单个请求将遵循的最大重定向数。默认是启动中间件,单个请求最大的重定向数,默认为20
-
HTTPERROR_ALLOWED_CODES
允许处理的状态码,一般用来处理301 302这类的状态码
-
当然,你也可以在settings中任意写入各种配置,如数据库的。看自己的需求
以下,针对分布式爬虫 scrapy-redis的配置
1. 确保request存储到redis中
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
2. 确保所有爬虫共享相同的去重指纹
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
3. 在redis中保持 scrapy-redis用到的队列,不会清理redis中的队列,从而可以实现暂停和恢复的功能
SCHEDULER_PERSIST = True
4. 设置 连接redis信息
REDIS_HOST = ‘192.168.43.115’
REDIS_PORT = 6379
REDIS_PARAMS = {‘password’: ‘xxx’}
未完待续…