scrapy配置文件操作核心API解读

96 Python之战

2019.03.24 23:33 字数 3612 阅读 0评论 0喜欢 0

编辑文章

scrapy是一个重型框架,但是在使用中却感觉很方面,只需要配置以下,写一点核心的代码,就可以实现高并发爬虫,这是得益于他的强大配置文件的机制,内置很多默认配置,同时还给用户提供了外在的配置,并解决其中的冲突,这是它强大的地方。

完整setting源码

import six
import json
import copy
from collections import MutableMapping
from importlib import import_module
from pprint import pformat

from . import default_settings

SETTINGS_PRIORITIES = {
    'default': 0,
    'command': 10,
    'project': 20,
    'spider': 30,
    'cmdline': 40,
}

def get_settings_priority(priority):
    """
    Small helper function that looks up a given string priority in the
    :attr:`~scrapy.settings.SETTINGS_PRIORITIES` dictionary and returns its
    numerical value, or directly returns a given numerical priority.
    """
    if isinstance(priority, six.string_types):
        return SETTINGS_PRIORITIES[priority]
    else:
        return priority

太多了,删减部分def iter_default_settings():
    """Return the default settings as an iterator of (name, value) tuples"""
    for name in dir(default_settings):
        if name.isupper():
            yield name, getattr(default_settings, name)

def overridden_settings(settings):
    """Return a dict of the settings that have been overridden"""
    for name, defvalue in iter_default_settings():
        value = settings[name]
        if not isinstance(defvalue, dict) and value != defvalue:
            yield name, value

scrapy.settings.SETTINGS_PRIORITIES

设置了Scrapy中默认的优先级的键名和优先级值的字典。

每个项目定义一个设置入口点,为其提供标识的代码名称和整数优先级。在设置和检索Settings类中的值时,更高优先级优先于较小优先 级。

该值位于scrapy.settings中,默认值如下:

SETTINGS_PRIORITIES = {

        'default': 0,

        'command': 10,

        'project': 20,

        'spider': 30,

        'cmdline': 40,

            }

scrapy.settings.get_settings_priority(priority)

源码

def get_settings_priority(priority):
    """
    Small helper function that looks up a given string priority in the
    :attr:`~scrapy.settings.SETTINGS_PRIORITIES` dictionary and returns its
    numerical value, or directly returns a given numerical priority.
    """
    if isinstance(priority, six.string_types):
        return SETTINGS_PRIORITIES[priority]
    else:
        return priority

用于在SETTINGS_PRIORITIES字典中查找给定的字符串优先级 并返回其数值, 或直接返回给定的数字优先级。

class scrapy.settings.Settings(values = None,priority ='project' )

继承: scrapy.settings.BaseSettings,该对象存储用于配置内部组件的Scrapy设置,并可用于任何进一步的自定义。

它是BaseSettings的子类,支持所有 BaseSettings方法。此外,在实例化此类之后,新对象将具有已在内置设置引用中描述的全局默认设置。

class Settings(BaseSettings):
    """
    This object stores Scrapy settings for the configuration of internal
    components, and can be used for any further customization.

    It is a direct subclass and supports all methods of
    :class:`~scrapy.settings.BaseSettings`. Additionally, after instantiation
    of this class, the new object will have the global default settings
    described on :ref:`topics-settings-ref` already populated.
    """

    def __init__(self, values=None, priority='project'):
        # Do not pass kwarg values here. We don't want to promote user-defined
        # dicts, and we want to update, not replace, default dicts with the
        # values given by the user
        super(Settings, self).__init__()
        self.setmodule(default_settings, 'default')
        # Promote default dictionaries to BaseSettings instances for per-key
        # priorities
        for name, val in six.iteritems(self):
            if isinstance(val, dict):
                self.set(name, BaseSettings(val, 'default'), 'default')
        self.update(values, priority)

class scrapy.settings.BaseSettings(values = None,priority ='project' )

此类的实例表现得像字典,但存储优先级键值对,并且可以被锁定(即标记为不可变)。

键值条目可以在初始化时使用values 参数传递,并且它们将采用该priority级别(除非values已经是实例BaseSettings,在这种情况下将保留现有的优先级)。如果priority 参数是字符串,则将查找优先级名称 SETTINGS_PRIORITIES。否则,应提供特定的整数。

创建对象后,可以使用该set()方法加载或更新新设置,并可使用 字典的方括号表示法或get()实例的 方法及其值转换变体进行访问。请求存储密钥时,将检索具有最高优先级的值。

该类具有以下方法

copy()

制作当前设置的深层副本。

此方法返回类的新实例,其中Settings填充了相同的值及其优先级。

对新对象的修改不会反映在原始设置上。

copy_to_dict()

制作当前设置的副本并转换为字典。

此法返回一个新的dict,其中填充了与当前设置相同的值及其优先级。

对返回的dict的修改不会影响原始设置上。

此方法可用于例如在Scrapy shell中打印设置。

freeze()

禁用对当前设置的进一步更改。

调用此方法后,设置的当前状态将变为不可变。试图通过该set()方法及其变体更改值是不可能的,并将被警告。

frozencopy()

返回当前设置的不可变副本。

freeze()在返回的对象中调用的别名copy()。

get(name,default=None)

获取设置值而不影响其原始类型。

参数:

name(字符串) - 设置名称

default(any) - 如果未找到设置则返回的值

getbool(name,default = False )

获取设置值作为布尔值。

1,'1',TRUE、'True'返回True,同时0,'0',False,'False'、None返回False。

例如,通过设置为的环境变量填充的设置 '0'将False在使用此方法时返回。

参数:

name(字符串) - 设置名称

default(any) - 如果未找到设置则返回的值

getdict(name,default=None)

获取设置值作为字典。

如果设置原始类型是字典,则将返回其副本。如果它是一个字符串,它将被转化为为JSON字典。如果它是一个 BaseSettings实例本身,它将被转换为一个字典,包含它们将返回的所有当前设置值get(),并丢失有关优先级和可变性的所有信息。

参数:

name(字符串) - 设置名称

default(any) - 如果未找到设置则返回的值

getfloat(name,default= 0.0 )

获取设置值作为浮点数。

参数:

name(字符串) - 设置名称

default(any) - 如果未找到设置则返回的值

getint(name,default= 0 )

获取设置值作为int。

参数:

name(字符串) - 设置名称

default(any) - 如果未找到设置则返回的值

getlist(name,default=None)

获取设置值作为列表。如果设置原始类型是列表,则将返回其副本。如果它是一个字符串,它将被“,”拆分。

例如,通过设置为的环境变量填充的设置 'one,two'将在使用此方法时返回列表['one','two']。

参数:

name(字符串) - 设置名称

default(any) - 如果未找到设置则返回的值

getpriority(name)

返回设置的当前数字优先级值,或者None如果给定的name不存在。

参数:name(字符串) - 设置名称

getwithbase(名字)

获得类似字典的设置及其_BASE 对应的组合。

参数: name(字符串) - 类字典设置的名称

maxpriority()

返回所有设置中存在的最高优先级的数值,或者如果没有存储设置则返回defaultfrom 的数值SETTINGS_PRIORITIES。

set(name,value,priority='project' )**

设置给定优先级的键/值属性。

在配置Crawler对象(通过configure()方法)之前应该填充设置,否则它们将不起作用。

参数:

name(字符串) - 设置名称

value(any) - 与设置关联的值

priority(字符串或整数) - 设置的优先级。应该是一个键 SETTINGS_PRIORITIES或整数

setmodule(modulepriority='project' )**

存储具有给定优先级的模块的设置。

这是一个辅助函数,它使用提供的函数调用 set()每个全局声明的大写变量。modulepriority

参数:

module(模块对象或字符串) - 模块或模块的路径

priority(字符串或整数) - 设置的优先级。应该是一个键 SETTINGS_PRIORITIES或

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值