scrapy0,24文档解读之setting配置(一)

想想就不从scrapy流程图去写了毕竟是记录,详细可读文档scrapy0.24中文文档
从学习的角度我认为从setting配置开始你会了解其他组件的功能以及设置,当然不涉及源码

首先了所谓的配置并不是只是写在setting这个文件里,同时在配置方法有优先级顺序:

  1. 命令行选项(Command line Options)(最高优先级)#终端设定

    ##可以使用command line 选项 -s (或 --set) 来覆盖一个(或更多)选项
    #scrapy crawl myspider -s LOG_FILE=scrapy.log#设置log
    
  2. 爬虫中设定
    #使用属性custom_settings覆盖项目的

    class DemoSpider(scrapy.Spider) :
        name = 'demo'
    
        custom_settings = {
            'SOME_SETTING': 'some value',
        }
  3. 项目设定模块(Project settings module)#就是setting文件
    获取通过:项目名.settings

  4. 命令默认设定(Default settings per-command)#自定义配置

    from scrapy.commands import ScrapyCommand
    class Command(ScrapyCommand):
        default_settings = {'LOG_ENABLED': False}
        def run(self, args, opts):
            print("hello")
  5. 默认全局设定(Default global settings)#导模块设置
    scrapy.settings.default_settings

如何访问设定:
1.爬虫中通过爬虫基类的属性setting就可以、

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

    def parse(self, response):
        print("Existing settings: %s" % self.settings.attributes.keys())##访问setting的键,当然也可以访问值

2在还未开始爬虫的时候,也就是请求未到parse,当然这涉及scrapy请求到返回response的过程,此处不多说

class MyExtension(object):
    def __init__(self, log_is_enabled=False):##这里在初始华中分配置了log是否开启
        if log_is_enabled:
            print("log is enabled!")

    @classmethod #用来指定一个类的方法为类方法,没有此参数指定的类的方法为实例方法,大概就是在初始化之前进行一些操作,这个例子很透彻:[生动的讲解](https://blog.csdn.net/dyh4201/article/details/78336529)
    def from_crawler(cls, crawler):###cls就是表示调用类名可以这么说吧
        settings = crawler.settings
        return cls(settings.getbool('LOG_ENABLED'))##getbool实在没资料不过有片Java文章里大概的意思:当且仅当以参数命名的系统属性存在,且等于 “true” 字符串时,才返回 true。这里应该是获取参数的值再加上cls就好解释了

3 设置对象可以像dict(例如, settings[‘LOG_ENABLED’])一样使用,但通常首选使用
SettingsAI 提供的方法之一,以您需要的格式提取设置,以避免类型错误。

设定名字的命名规则:

设定的名字以要配置的组件作为前缀。 例如,一个robots.txt插件的合适设定应该为 ROBOTSTXT_ENABLED, ROBOTSTXT_OBEY, ROBOTSTXT_CACHEDIR 等等。

好吧大菜来了
1:AWS_ACCESS_KEY_ID

    默认: None
    由需要访问Amazon Web服务的代码使用的AWS访问密钥(AWS access key),例如S3源存储后端###这个scrapy有专门的存储系统后面会专门说

2:AWS_SECRET_ACCESS_KEY

    默认: None
    由需要访问Amazon Web服务的代码使用的AWS密钥(AWS secret key),例如S3源存储后端。

3:BOT_NAME

    默认: 'scrapybot'
    Scrapy项目实现的bot的名字(项目名称)。 这将用来构造默认 User-Agent,同时也用来log。
    使用 startproject 命令创建项目时其也被自动赋值

4:CONCURRENT_ITEMS##处理item的并发最大值

    默认: 100
    Item Processor(即 Item Pipeline) 同时处理(每个response的)item的最大值。

5:CONCURRENT_REQUESTS###也就是总的请求并发数

    默认: 16
    Scrapy downloader 并发请求(concurrent requests)的最大值

6:CONCURRENT_REQUESTS_PER_DOMAIN##单站默认8个请求并发线程

    默认: 8
    对单个网站进行并发请求的最大值

7:CONCURRENT_REQUESTS_PER_IP##从ip设置并发非0,并发数使用此设定数

    默认: 0
    对单个IP进行并发请求的最大值。如果非0,则忽略 CONCURRENT_REQUESTS_PER_DOMAIN 设定, 使用该设定。 也就是说,并发限制将针对IP,而不是网站。

    该设定也影响 DOWNLOAD_DELAY: 如果 CONCURRENT_REQUESTS_PER_IP 非0,下载延迟应用在IP而不是网站上。

8:DEFAULT_ITEM_CLASS##默认最好

    默认: 'scrapy.item.Item'
    the Scrapy shell 中实例化item使用的默认类

9:DEFAULT_REQUEST_HEADERS##由DefaultHeadersMiddleware产生的默认header,可用setting配置头部覆盖,也可自己设置header,当然爬虫中也可以设置只是每次回调都要传参

    默认:
    {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Accept-Language': 'en',
    }
    Scrapy HTTP Request使用的默认header。由 DefaultHeadersMiddleware 产生

10:DEPTH_LIMIT##爬取深度,一般不会丢掉这个,也和你的爬取策略有关:深度优先,广度优先。这还有个关于去重策略的文章:策略

    默认: 0
    爬取网站最大允许的深度(depth)值。如果为0,则没有限制

11:DEPTH_PRIORITY##根据深度调整优先级

默认: 0
整数值。用于根据深度调整request优先级。
如果为0,则不根据深度进行优先级调整

12:DEPTH_STATS##请注意收集和爬取是两个概念,scrapy有自己的收集系统

    默认: True
    是否收集最大深度数据

13:DEPTH_STATS_VERBOSE##这个收集每个深度的详细数据说实话不太懂,难道不设置就不详细?线程并发问题?还是?以后在代码去解决这个疑惑

    默认: False
    是否收集详细的深度数据。如果启用,每个深度的请求数将会被收集在数据中

14:DNSCACHE_ENABLED##是否启用dns代理缓存

    默认: True
    是否启用DNS内存缓存(DNS in-memory cache)

加1:DNSCACHE_SIZE##dns缓存大小

    Default: 10000

加2:DNS_TIMEOUT##dns查询超时

    Default: 60

15:DOWNLOADER##这还是不要改为妙

    默认: 'scrapy.core.downloader.Downloader'
    用于crawl的downloader.

16:DOWNLOADER_MIDDLEWARES##这个是管理下载中间件的顺序,可以用none来改启不启用中间件

    默认:: {}
    保存项目中启用的下载中间件及其顺序的字典。

17:DOWNLOADER_MIDDLEWARES_BASE#默认的中间件,顺序也有,别在这改,如果不想用了在上面这个字典里配置为none就可以了。

    默认:
    {
        'scrapy.contrib.downloadermiddleware.robotstxt.RobotsTxtMiddleware': 100,
        'scrapy.contrib.downloadermiddleware.httpauth.HttpAuthMiddleware': 300,
        'scrapy.contrib.downloadermiddleware.downloadtimeout.DownloadTimeoutMiddleware': 350,
        'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': 400,
        'scrapy.contrib.downloadermiddleware.retry.RetryMiddleware': 500,
        'scrapy.contrib.downloadermiddleware.defaultheaders.DefaultHeadersMiddleware': 550,
        'scrapy.contrib.downloadermiddleware.redirect.MetaRefreshMiddleware': 580,
        'scrapy.contrib.downloadermiddleware.httpcompression.HttpCompressionMiddleware': 590,
        'scrapy.contrib.downloadermiddleware.redirect.RedirectMiddleware': 600,
        'scrapy.contrib.downloadermiddleware.cookies.CookiesMiddleware': 700,
        'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 750,
        'scrapy.contrib.downloadermiddleware.chunked.ChunkedTransferMiddleware': 830,
        'scrapy.contrib.downloadermiddleware.stats.DownloaderStats': 850,
        'scrapy.contrib.downloadermiddleware.httpcache.HttpCacheMiddleware': 900,
    }
    包含Scrapy默认启用的下载中间件的字典。 永远不要在项目中修改该设定,而是修改 DOWNLOADER_MIDDLEWARES 。

18:DOWNLOADER_STATS#收集器有些功能可以当log使用,比如统计哪一层爬了多少页

    默认: True
    是否收集下载器数据

19:DOWNLOAD_DELAY###网站下载页面的固定延迟,默认0.25,特殊的看下面

    默认: 0
    下载器在下载同一个网站下一个页面前需要等待的时间。该选项可以用来限制爬取速度, 减轻服务器压力。同时也支持小数:
    DOWNLOAD_DELAY = 0.25    # 250 ms of delay

    该设定影响(默认启用的) RANDOMIZE_DOWNLOAD_DELAY 设定。 默认情况下,Scrapy在两个请求间不等待一个固定的值, 而是使用0.5到1.5之间的一个随机值 * DOWNLOAD_DELAY 的结果作为等待间隔。

    当 CONCURRENT_REQUESTS_PER_IP 非0时,延迟针对的是每个ip而不是网站。
    另外您可以通过spider的 download_delay 属性为每个spider设置该设定。

20:DOWNLOAD_HANDLERS###启用何种下载器

    默认: {}
    保存项目中启用的下载处理器(request downloader handler)的字典。

21:DOWNLOAD_HANDLERS_BASE##默认的的几种下载器,全开,上面改

    默认:
    {
        'file': 'scrapy.core.downloader.handlers.file.FileDownloadHandler',
        'http': 'scrapy.core.downloader.handlers.http.HttpDownloadHandler',
        'https': 'scrapy.core.downloader.handlers.http.HttpDownloadHandler',
        's3': 'scrapy.core.downloader.handlers.s3.S3DownloadHandler',
    }
    保存项目中默认启用的下载处理器(request downloader handler)的字典。 永远不要在项目中修改该设定,而是修改 DOWNLOADER_HANDLERS 。

    如果需要关闭上面的下载处理器,您必须在项目中的 DOWNLOAD_HANDLERS 设定中设置该处理器,并为其赋值为 None 。 例如,关闭文件下载处理器:
    DOWNLOAD_HANDLERS = {
        'file': None,
    }

22:DOWNLOAD_TIMEOUT##下载超时默认180,秒

    默认: 180
    下载器超时时间(单位: 秒)

好了该睡觉了下一篇有空再补

你可能感兴趣的:(笔记)