settings概述
我们在使用scrapy的时候,经常需要设置或者修改一些参数,而scrapy的参数共分为5个级别,具体如下:
- scrapy默认参数
- 每个命令的默认参数
- 项目settings模块
- 单独爬虫参数设置
- 命令行选项
优先级从1-5逐渐上升,也就是4中设置的参数,会覆盖掉3中设置的参数,原理就是python中字典dict的update。
3(项目settings模块)就是我们最常使用的settings模块,通常作为全局通用设置。
有时候我们一个项目会有多个spider,而每个spider需要设置的参数并不一样,比如spider1需要使用pipeline1将数据存入到mysql中,而spider2使用pipeline2将数据存入redis中,因此我们要对两个spider分开进行pipeline配置,可在spider中添加custom_settings字典,将参数写入其中即可,如下(命令行选项同理):
class MySpider(scrapy.Spider):
name = 'spider1'
custom_settings = {
'ITEM_PIPELINES': {'myproject.pipelines.pipeline1': 301},
}
class MySpider(scrapy.Spider):
name = 'spider2'
custom_settings = {
'ITEM_PIPELINES': {'myproject.pipelines.pipeline2': 301},
}
常用的settings参数
CONCURRENT_REQUESTS = 16 # 全局最大并发数
CONCURRENT_REQUESTS_PER_DOMAIN = 8 # 单个域名最大并发数,如果下一个参数设置非0,此参数无效
CONCURRENT_REQUESTS_PER_IP = 0 # 单个ip最大并发数
COOKIES_ENABLED = True # 默认启用cookie,无需登录时一般将其关闭
DEFAULT_REQUEST_HEADERS = { # 设置默认请求头
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en',
}
DOWNLOAD_DELAY = 0 # 下载延时,高并发采集时设为0
DOWNLOAD_TIMEOUT = 180 # 超时时间设置,一般设置在10-30之间
LOG_ENABLED = True # 启用日志
LOG_STDOUT = False # 将进程所有的标准输出(及错误)重定向到log中,默认False。如果开启,在项目中的print方法也会以log的形式输出
LOG_LEVEL = 'DEBUG' # 日志输出级别,上线后至少使用info级别
LOG_FILE = None # 将日志输出到文件中
LOGSTATS_INTERVAL = 60.0 # 吞吐量输出间隔,就是输出每分钟下载多少个页面、捕获多少个item的那个,默认每分钟输出一次,自主配置
REDIRECT_ENABLED = True # 默认开启页面跳转,一般选择关闭
RETRY_ENABLED = True # 默认开启失败重试,一般关闭
RETRY_TIMES = 2 # 失败后重试次数,默认两次
RETRY_HTTP_CODES = [500, 502, 503, 504, 522, 524, 408] # 碰到这些验证码,才开启重试
ROBOTSTXT_OBEY = False # 遵守网站robot协议,一般是不遵守的···········
DOWNLOADER_MIDDLEWARES = { # 下载中间件
'myproject.middlewares.MyDownloaderMiddleware': 543,
}
ITEM_PIPELINES = { # 数据处理、存储pipeline
'myproject.pipelines.MyPipeline': 300,
}