当前位置:   article > 正文

爬虫工作量由小到大的思维转变---<第三十一章 Scrapy Redis 初启动/conn说明书)>_怎么启动scrapy-redis

怎么启动scrapy-redis

前言:

重点在读connection.py的源码,这个组件主要是用来连接的; 因为连接都无法做到,后面想更改点自定义就白扯了;

正文:

翻译版的connection.py源码:

  1. import sys
  2. import six
  3. from scrapy.utils.misc import load_object
  4. from . import defaults
  5. # 快捷方式映射 '设置名称' -> '参数名称'
  6. SETTINGS_PARAMS_MAP = {
  7. 'REDIS_URL': 'url',
  8. 'REDIS_HOST': 'host',
  9. 'REDIS_PORT': 'port',
  10. 'REDIS_DB': 'db',
  11. 'REDIS_ENCODING': 'encoding',
  12. }
  13. if sys.version_info > (3,):
  14. SETTINGS_PARAMS_MAP['REDIS_DECODE_RESPONSES'] = 'decode_responses'
  15. def get_redis_from_settings(settings):
  16. """从给定的Scrapy设置对象返回一个redis客户端实例。
  17. 此函数使用``get_client``来实例化客户端,并使用``defaults.REDIS_PARAMS``作为参数的默认值。
  18. 您可以使用``REDIS_PARAMS``设置来覆盖它们。
  19. 参数
  20. ----------
  21. settings : Settings
  22. 一个Scrapy设置对象。参见下面支持的设置。
  23. 返回
  24. -------
  25. server
  26. Redis客户端实例。
  27. 其他参数
  28. ----------------
  29. REDIS_URL : str, 可选
  30. 服务器连接URL。
  31. REDIS_HOST : str, 可选
  32. 服务器主机。
  33. REDIS_PORT : str, 可选
  34. 服务器端口。
  35. REDIS_DB : int, 可选
  36. 服务器数据库。
  37. REDIS_ENCODING : str, 可选
  38. 数据编码。
  39. REDIS_PARAMS : dict, 可选
  40. 其他客户端参数。
  41. Python 3 Only
  42. ----------------
  43. REDIS_DECODE_RESPONSES : bool, 可选
  44. 设置`decode_responses` kwarg在Redis cls的构造函数中。
  45. """
  46. params = defaults.REDIS_PARAMS.copy()
  47. params.update(settings.getdict('REDIS_PARAMS'))
  48. # XXX: Deprecate REDIS_* settings.
  49. for source, dest in SETTINGS_PARAMS_MAP.items():
  50. val = settings.get(source)
  51. if val:
  52. params[dest] = val
  53. # 允许 ``redis_cls`` 是一个类的路径。
  54. if isinstance(params.get('redis_cls'), six.string_types):
  55. params['redis_cls'] = load_object(params['redis_cls'])
  56. return get_redis(**params)
  57. # 向后兼容的别名。
  58. from_settings = get_redis_from_settings
  59. def get_redis(**kwargs):
  60. """返回一个redis客户端实例。
  61. 参数
  62. ----------
  63. redis_cls : class, 可选
  64. 默认值为 ``redis.StrictRedis``。
  65. url : str, 可选
  66. 如果给定,将使用``redis_cls.from_url``来实例化该类。
  67. **kwargs
  68. 要传递给``redis_cls``类的额外参数。
  69. 返回
  70. -------
  71. server
  72. Redis客户端实例。
  73. """
  74. redis_cls = kwargs.pop('redis_cls', defaults.REDIS_CLS)
  75. url = kwargs.pop('url', None)
  76. if url:
  77. return redis_cls.from_url(url, **kwargs)
  78. else:
  79. return redis_cls(**kwargs)

介绍

该模块包含两个主要的函数:
  • get_redis_from_settings(settings):
    • 该函数从Scrapy的设置对象中获取Redis客户端实例。它使用get_client来实例化客户端,并使用默认参数值 defaults.REDIS_PARAMS。您可以通过设置REDIS_PARAMS来覆盖这些默认值。此函数允许您通过设置Scrapy的设置来轻松配置和创建Redis连接。
  • get_redis(**kwargs):
    • 该函数返回一个Redis客户端实例。它使用提供的参数来初始化实例。如果提供了url参数,则通过redis_cls.from_url方法来实例化类。否则,它使用提供的参数来构造Redis客户端实例。

-------这些函数的目的是为了在Scrapy中与Redis服务器进行交互,例如在分布式爬虫中使用Redis作为任务队列、存储爬取的数据等;

案例:

1. 创建一个Scrapy项目:

  1. scrapy startproject myproject
  2. cd myproject


 

2. 在Scrapy项目的根目录下,创建一个新的Spider,并将Redis相关的配置添加到Scrapy的设置文件中(settings.py):

  1. # 启用Scrapy-Redis插件
  2. SCHEDULER = "scrapy_redis.scheduler.Scheduler"
  3. DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
  4. # 指定Redis连接信息
  5. REDIS_URL = 'redis://127.0.0.1:6379'

3. 创建一个Spider,使用Redis进行分布式爬取:

  1. import scrapy
  2. from scrapy_redis.spiders import RedisSpider
  3. class MySpider(RedisSpider):
  4.     name = 'myspider'
  5.     redis_key = 'myspider:start_urls' #这里面的值随便你定义
  6. #例如,你写成:"s:B" -->在redis同链接下,输入:`lpush s:B https://wangzhi.com`一样能跑
  7.     def parse(self, response):
  8.         # 处理爬取到的数据
  9.         # ...
  10.         yield scrapy.Request(url, callback=self.parse)

在这个例子中,我们先继承`RedisSpider`类来创建我们的Spider。`redis_key`属性指定了初始URL在Redis中的键。Scrapy-Redis插件会自动从该键读取URL,并且使用`parse`方法进行爬取和解析。

4. 在Scrapy项目的主文件(main.py)中,导入并使用`get_redis_from_settings`函数来获取Redis连接实例:
  1. import scrapy
  2. from scrapy.crawler import CrawlerProcess
  3. from scrapy_redis import get_redis_from_settings
  4. from myproject.myspider import MySpider
  5. # 获取Redis连接实例
  6. settings = scrapy.settings.Settings()
  7. redis_conn = get_redis_from_settings(settings)
  8. # 创建CrawlerProcess
  9. process = CrawlerProcess(settings)
  10. process.crawl(MySpider, redis_conn=redis_conn)
  11. process.start()

通过使用`get_redis_from_settings`函数,我们从Scrapy的设置对象中获取Redis连接实例。然后,我们可以将该连接实例传递给我们的Spider,并使用`redis_conn`参数进行配置。最后,我们使用`CrawlerProcess`来创建和启动爬虫进程。

总结:

一般来说,这么操作一番下来! 你丢个起始url进去,项目能跑了,就是连接成功了!  项目跑不了,就是没连接成功,那你就对着源码好好检查一下子!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/43103
推荐阅读
相关标签
  

闽ICP备14008679号