源码分析参考:Connection
来源:互联网 发布:淘宝退货官方寄快递 编辑:程序博客网 时间:2024/06/05 11:57
官方站点:https://github.com/rolando/scrapy-redis
scrapy-redis的官方文档写的比较简洁,没有提及其运行原理,所以如果想全面的理解分布式爬虫的运行原理,还是得看scrapy-redis的源代码才行。
scrapy-redis工程的主体还是是redis和scrapy两个库,工程本身实现的东西不是很多,这个工程就像胶水一样,把这两个插件粘结了起来。下面我们来看看,scrapy-redis的每一个源代码文件都实现了什么功能,最后如何实现分布式的爬虫系统:
- connection.py
负责根据setting中配置实例化redis连接。被dupefilter和scheduler调用,总之涉及到redis存取的都要使用到这个模块。
# 这里引入了redis模块,这个是redis-python库的接口,用于通过python访问redis数据库,# 这个文件主要是实现连接redis数据库的功能,这些连接接口在其他文件中经常被用到import redisimport 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 uses ``DEFAULT_PARAMS`` global as defaults values for the parameters. You can override them using the ``REDIS_PARAMS`` setting. Parameters ---------- settings : Settings A scrapy settings object. See the supported settings below. Returns ------- server Redis client instance. Other Parameters ---------------- REDIS_URL : str, optional Server connection URL. REDIS_HOST : str, optional Server host. REDIS_PORT : str, optional Server port. REDIS_PARAMS : dict, optional Additional 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, optional Defaults to ``redis.StrictRedis``. url : str, optional If given, ``redis_cls.from_url`` is used to instantiate the class. **kwargs Extra parameters to be passed to the ``redis_cls`` class. Returns ------- server Redis 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)
阅读全文
0 0
- 源码分析参考:Connection
- 源码分析参考:Dupefilter
- 源码分析参考:Picklecompat
- 源码分析参考:Pipelines
- 源码分析参考:Queue
- 源码分析参考:Scheduler
- 源码分析参考:Spider
- Tor源码文件分析 -- Connection
- openfire 源码分析 session & connection
- Tomcat 源码分析参考文章
- java ArrayList源码分析参考文章
- mysql jdbc驱动源码分析(获取链接 connection)
- Android蓝牙源码分析——Gatt的Connection ID
- 源码参考
- Tensorflow学习笔记参考—源码分析之最近算法
- BT客户端源码分析之五:Encoder 类和 Connection 类
- openstack nova 源码分析5-1 -nova/virt/libvirt目录下的connection.py
- openstack nova 源码分析5-2 -nova/virt/libvirt目录下的connection.py
- 酷科技 | 智能冰敷头带
- 小蓝单车倒闭了?盘点共享单车众生相:跑路、罢免CEO、卖公司……
- Linux netstat命令详解
- 理解get和post的区别
- 多线程与信号
- 源码分析参考:Connection
- 技术分享连载(四十七)
- webapi跨域
- centos7 install google chrome explorer
- 如何使用TestFlight进行App构建版本测试
- 深入理解C语言的指针*和引用&
- JavaScript操作JSON总结
- javaScript for循环保存json值被覆盖问题
- 51nod1232 完美数 数位DP