[scrapy]scrapy-redis快速上手/scrapy爬虫分布式改造

àì夳堔傛蜴生んèń 2022-05-30 04:59 336阅读 0赞

提示

阅读本文章,您需要:

  • 了解scrapy,知道scrapy-redis可以用来干嘛,最好已经有了可以单机运行的scrapy爬虫。
  • 已经尝试了一些反反爬措施后仍然觉得爬取效率太低。
  • 已经看了无数scrapy-redis文章,却和我一样不得要领。(自己太笨)
  • 已经看了无数scrapy-redis文章,被辣鸡文章坑的生活不能自理,到现在还没配置好。(可能还是自己太笨)

提示:本文为快速上手文章,有些操作的具体步骤不详细讲,自行百度通用解法,省略的部分我认为你可以自行解决,如果遇到问题,请留言提问

使用scrapy-redis将scrapy改造为分布式

安装需要的python库和数据库

  • 安装scrapy-redis:pip install scrapy-redis
  • 安装redis:可以仅在master(主)端安装
  • 安装其他数据库(可选):mysql,mangoDB,用来保存大量数据,当然也可以选择不安装。用其他方法处理数据。

提示:请注意版本问题,不要过低。

配置redis

  1. master(主)上的redis安装后,需要做以下几件事:

    • 配置redis.conf设置从外网访问:#bind 127.0.0.1
    • 最好设置个密码
    • 取消保护模式 protected-mode no
  2. master启动redis,使用./redis-server redis.conf(改为你的设置文件所在位置)
  3. 尝试从slave(从)连接master的redis,连接成功(盗的图):

image

修改scrapy:setting.py

添加如下代码:

  1. # scrapy-redis
  2. REDIS_URL = 'redis://:yzd@127.0.0.1:6379' # for master
  3. # REDIS_URL = 'redis://:yzd@10.140.0.2:6379' # for slave (master's ip)
  4. SCHEDULER = "scrapy_redis.scheduler.Scheduler"
  5. SCHEDULER_PERSIST = True
  6. DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

对于itempipeline:你以前怎么存的数据还是怎么存,当然你也可以用redis先存,之后再一起转移出来。像我就直接存到mysql了

  1. ITEM_PIPELINES = {
  2. # 'JD.pipelines.JdPipeline': 300,
  3. # 'scrapy_redis.pipelines.RedisPipeline': 400,
  4. 'JD.mysqlpipelines.pipelines.JDPipeline': 300,
  5. }

修改scrapy:spiders/xxxxx.py(自己命名的爬虫文件)

将继承改为继承Redisspider

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import scrapy
  4. from JD.items import JdItem
  5. import logging
  6. from scrapy_redis.spiders import RedisSpider
  7. import time
  8. # class JDcat(scrapy.Spider):
  9. class JDcat(RedisSpider):
  10. name = "JDcate"
  11. allowed_domains = ["jd.com"]
  12. # scrapy-redis
  13. redis_key = "JDcate:JD_urls"
  14. def start_requests(self):
  15. # designed by yourself
  16. # yield scrapy.Request(url=url, callback=self.parse)
  17. pass
  18. def parse(self, response):
  19. # designed by yourself
  20. pass

修改slave的存储数据库设置(可选)

如果你想要让slave抓取到的数据直接存入master的数据库,您别忘了修改slave的数据库连接设置

  1. # for master
  2. db_item = pymysql.connect(host="localhost", user="root", password="root",
  3. db="pricemonitor", port=3306, charset='utf8')
  4. # for slave
  5. # db_item = pymysql.connect(host="10.140.0.2", user="root", password="root",
  6. # db="pricemonitor", port=3306, charset='utf8')

启动分布式爬虫

启动master:scrapy crawl xxxxx
启动slave: crawl xxxxx
image2

上传了个demo源码,供大家修改使用:
https://github.com/qqxx6661/scrapy_redis_demo

有问题请留言或邮件qqxx6661@gmail.com

参考

https://www.cnblogs.com/zjl6/p/6742673.html

发表评论

表情:
评论列表 (有 0 条评论,336人围观)

还没有评论,来说两句吧...

相关阅读

    相关 分布式爬虫scrapy-redis

    分布式爬虫Scrapy-Redis > 分布式爬虫是由一组通过网络进行通信、为了完成共同的爬虫任务而协调工作的计算机节点组成的系统。分布式爬虫是将多台主机组合起来,共同完