网站内部优化策略,凡科网登录下载,wordpress无法选择服务器配置,专业的英文网站建设官方站点#xff1a;GitHub - rmax/scrapy-redis: Redis-based components for Scrapy.
scrapy-redis的官方文档写的比较简洁#xff0c;没有提及其运行原理#xff0c;所以如果想全面的理解分布式爬虫的运行原理#xff0c;还是得看scrapy-redis的源代码才行。
scrapy-r…官方站点GitHub - rmax/scrapy-redis: Redis-based components for Scrapy.
scrapy-redis的官方文档写的比较简洁没有提及其运行原理所以如果想全面的理解分布式爬虫的运行原理还是得看scrapy-redis的源代码才行。
scrapy-redis工程的主体还是是redis和scrapy两个库工程本身实现的东西不是很多这个工程就像胶水一样把这两个插件粘结了起来。下面我们来看看scrapy-redis的每一个源代码文件都实现了什么功能最后如何实现分布式的爬虫系统
connection.py
负责根据setting中配置实例化redis连接。被dupefilter和scheduler调用总之涉及到redis存取的都要使用到这个模块。 # 这里引入了redis模块这个是redis-python库的接口用于通过python访问redis数据库
# 这个文件主要是实现连接redis数据库的功能这些连接接口在其他文件中经常被用到import redis
import sixfrom scrapy.utils.misc import load_objectDEFAULT_REDIS_CLS redis.StrictRedis# 可以在settings文件中配置套接字的超时时间、等待时间等
# Sane connection defaults.
DEFAULT_PARAMS {socket_timeout: 30,socket_connect_timeout: 30,retry_on_timeout: True,
}# 要想连接到redis数据库和其他数据库差不多需要一个ip地址、端口号、用户名密码可选和一个整形的数据库编号
# Shortcut maps setting name - parmater name.
SETTINGS_PARAMS_MAP {REDIS_URL: url,REDIS_HOST: host,REDIS_PORT: port,
}def get_redis_from_settings(settings):Returns a redis client instance from given Scrapy settings object.This function uses get_client to instantiate the client and usesDEFAULT_PARAMS global as defaults values for the parameters. You canoverride them using the REDIS_PARAMS setting.Parameters----------settings : SettingsA scrapy settings object. See the supported settings below.Returns-------serverRedis client instance.Other Parameters----------------REDIS_URL : str, optionalServer connection URL.REDIS_HOST : str, optionalServer host.REDIS_PORT : str, optionalServer port.REDIS_PARAMS : dict, optionalAdditional client parameters.params DEFAULT_PARAMS.copy()params.update(settings.getdict(REDIS_PARAMS))# XXX: Deprecate REDIS_* settings.for source, dest in SETTINGS_PARAMS_MAP.items():val settings.get(source)if val:params[dest] val# Allow redis_cls to be a path to a class.if isinstance(params.get(redis_cls), six.string_types):params[redis_cls] load_object(params[redis_cls])# 返回的是redis库的Redis对象可以直接用来进行数据操作的对象return get_redis(**params)# Backwards compatible alias.
from_settings get_redis_from_settingsdef get_redis(**kwargs):Returns a redis client instance.Parameters----------redis_cls : class, optionalDefaults to redis.StrictRedis.url : str, optionalIf given, redis_cls.from_url is used to instantiate the class.**kwargsExtra parameters to be passed to the redis_cls class.Returns-------serverRedis client instance.redis_cls kwargs.pop(redis_cls, DEFAULT_REDIS_CLS)url kwargs.pop(url, None)if url:return redis_cls.from_url(url, **kwargs)else:return redis_cls(**kwargs)