• 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,不过一些配置可能会出问题

  • 相关阅读:
    TomCat安装配置教程
    Java桌面程序打包成exe可执行文件
    【android studio】 gradle配置成本地离线zip包
    使用Android Studio过程中,停留在“Building ‘工程名’ Gradle project info”的解决方法
    Android studio启动后卡在refreshing gradle project(包解决)
    Genymotion的安装与使用(附百度云盘下载地址,全套都有,无需注册Genymotion即可使用)
    CodeForcesGym 100735G LCS Revised
    CodeForcesGym 100735D Triangle Formation
    CodeForcesGym 100735B Retrospective Sequence
    HDU 2829 Lawrence
  • 原文地址:https://www.cnblogs.com/fengf233/p/11400262.html
Copyright © 2020-2023  润新知