Loading

Scrapy进阶知识点总结(五)——Settings

 

1.设置优先级

Scrapy中有不同层次的设置,其类型以及优先级如下(从高到低):

  • 1.命令行命令中指定的设置
  • 2.每个spider中的设置
  • 3.scrapy项目中settings.py设置
  • 4.命令行命令的默认设置
  • 5.scrapy全局的默认设置

1.命令行命令中指定的设置

命令行提供的参数是最优先的参数,覆盖任何其他选项

scrapy crawl myspider -s LOG_FILE=scrapy.log

2.每个spider中的设置

spider可以定义自己的设置,这些设置优先并覆盖项目设置。他们可以通过设置custom_settings属性来实现

class MySpider(scrapy.Spider):
    name = 'myspider'

    custom_settings = {
        'SOME_SETTING': 'some value',
    }

3.scrapy项目中settings.py设置

通过project.settings中修改,下面有详细的配置解释

4.命令行命令的默认设置

每个Scrapy工具命令都可以有自己的默认设置,这些设置会覆盖全局默认设置。这些自定义命令设置default_settings在命令类的属性中指定。

5.scrapy全局的默认设置

全局默认值位于scrapy.settings.default_settings 模块中

 

2.settings设置

BOT_NAME

此Scrapy项目名称。这将默认用于构建User-Agent,也用于日志记录。使用该startproject命令创建项目时,它会自动填充项目名称

SPIDER_MODULES

scrapy查找spider的路径

NEWSPIDER_MODULE

指定使用genspider时创建spider的路径

USER_AGENT

爬虫时使用的默认User-Agent,除非被覆盖。默认: "Scrapy/VERSION (+https://scrapy.org)"

ROBOTSTXT_OBEY

表示遵不遵守君子协议,默认False

CONCURRENT_REQUESTS

Scrapy下载程序将执行的最大并发(即同时)请求数。默认16

DOWNLOAD_DELAY

下载延时,限制爬虫速度,防止过快被封

CONCURRENT_REQUESTS_PER_DOMAIN

将对任何单个域执行的最大并发(即同时)请求数

CONCURRENT_REQUESTS_PER_IP

对任何单个IP执行的最大并发(即同时)请求数。如果设置这个会忽略CONCURRENT_REQUESTS_PER_DOMAIN设置

COOKIES_ENABLED

是否启用cookies,如果启用,同时也会启用cookies中间件,默认是开。如果要用setting中请求头中cookie设置,则需要关闭这个,因为scrapy默认使用cookies中间件管理,可能会有冲突。

TELNETCONSOLE_ENABLED

是否启用Telnet

DEFAULT_REQUEST_HEADERS

配置请求头,项目全局配置,会被局部如spider headers请求中间件等覆盖,详细看这里解释的比较好
即优先级为:中间件方式downloadermiddleware  > scrapy.Request(headers)  > spider中custom_settings   > settings.py > Scrapy默认

SPIDER_MIDDLEWARES

启用的spider中间件,数字越高优先级越高

DOWNLOADER_MIDDLEWARES

下载器中间件

EXTENSIONS

拓展,参考官网拓展章节

ITEM_PIPELINES

启用的item管道

AUTOTHROTTLE_ENABLED

启用AutoThrottle扩展,自动限速功能,有时爬的数据不全,可以试试这个。。

AUTOTHROTTLE_START_DELAY

AutoThrottle扩展初始下载延迟(以秒为单位)

AUTOTHROTTLE_MAX_DELAY

AutoThrottle扩展,在高延迟的情况下要设置的最大下载延迟(以秒为单位)

AUTOTHROTTLE_TARGET_CONCURRENCY

AutoThrottle扩展,对每个网站的并发量

AUTOTHROTTLE_DEBUG

启用AutoThrottle调试模式,该模式将显示收到的每个响应的统计信息,以便您可以查看如何实时调整限制参数

HTTPCACHE_ENABLED

是否启用HTTP缓存

HTTPCACHE_EXPIRATION_SECS

缓存请求的到期时间,以秒为单位

HTTPCACHE_DIR

用于存储(低级)HTTP缓存的目录。如果为空,则将禁用HTTP缓存。如果给出相对路径,则相对于项目数据dir

HTTPCACHE_IGNORE_HTTP_CODES

不要使用这些HTTP代码缓存响应(不懂)

HTTPCACHE_STORAGE

实现缓存存储后端的类
 
以上是使用startproject时settings.py中默认的设置,还有其它设置可以自行添加
 

3.访问setting

在spider中通过self.settings获取

class MySpider(scrapy.Spider):
    name = 'myspider'
    start_urls = ['http://example.com']

    def parse(self, response):
        print("Existing settings: %s" % self.settings.attributes.keys())

通过from_crawler类方法获取scrapy.crawler.Crawler.settings 中的属性

class MyExtension(object):
    def __init__(self, log_is_enabled=False):
        if log_is_enabled:
            print("log is enabled!")

    @classmethod
    def from_crawler(cls, crawler):
        settings = crawler.settings
        return cls(settings.getbool('LOG_ENABLED'))

可以在spider类、middleware类、pipeline类以及extension使用from_crawler方法

 

4.总结

1.settings.py中的设置是针对整个项目的,可以添加对整个spiders通用的设置

2.custom_settings是spider单独的设置,比如可以设置每个spider用不同的中间件或管道

3.命令行中的设置,最高的优先级,应用场景比如,cmd多开的时候使用不同配置去跑spider,不过一些配置可能会出问题

 

posted @ 2019-08-30 17:17  fengf233  阅读(1586)  评论(0编辑  收藏  举报