(2)scrapy中的settings

settings概述

我们在使用scrapy的时候,经常需要设置或者修改一些参数,而scrapy的参数共分为5个级别,具体如下:

  1. scrapy默认参数
  2. 每个命令的默认参数
  3. 项目settings模块
  4. 单独爬虫参数设置
  5. 命令行选项

优先级从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,
}


    原文作者:Fathui
    原文地址: https://www.jianshu.com/p/c64eefc0367e
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞