CrawlSpider-redis分布式

  • 分布式在日常开发中并不常用,只是一个噱头!

  • 概念:

    • 可以使用多台电脑搭建一个分布式机群,使得多台对电脑可以对同一个网站的数据进行联合且分布的数据爬取。
  • 声明:

    • 原生的scrapy框架并无法实现分布式操作!why?

      • 多台电脑之间无法共享同一个调度器
      • 多台电脑之间无法共享同一个管道
  • 如何是的scrapy可以实现分布式呢?

    • 借助于一个组件:scrapy-redis
    • scrapy-redis的作用是什么?
      • 可以给原生的scrapy框架提供可被共享的调度器和管道!
      • 环境安装:pip install scrapy-redis
        • 注意:scrapy-redis该组件只可以将爬取到的数据存储到redis数据库
  • 编码流程(重点):

    • 1.创建项目

    • 2.cd 项目

    • 3.创建基于crawlSpider的爬虫文件

      • 3.1 修改爬虫文件

        • 导包:from scrapy_redis.spiders import RedisCrawlSpider

        • 修改当前爬虫类的父类为 RedisCrawlSpider

        • class FbsSpider(RedisCrawlSpider):
        • 将start_urls替换成redis_key的操作

          • redis_key变量的赋值为字符串,该字符串表示调度器队列的名称

          • # start_urls = ["http://www.xxx.com/"]
            #redis_key的赋值为字符串,该字符串表示调度器队列的名称
            redis_key = '队列名称'
        • 进行常规的请求操作和数据解析

    • 4.settings配置文件的修改

      • 常规内容修改(robots和ua等),先不指定日志等级

      • USER_AGENT : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
        # Obey robots.txt rules
        ROBOTSTXT_OBEY = False
      • 指定可以被共享的管道类

        • ITEM_PIPELINES = {
          'scrapy_redis.pipelines.RedisPipeline': 400
          }
      • 指定可以被共享的调度器

        • # 使用scrapy-redis组件的去重队列
          DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
          # 使用scrapy-redis组件自己的调度器
          SCHEDULER = "scrapy_redis.scheduler.Scheduler"
          # 是否允许暂停
          SCHEDULER_PERSIST = True
      • 指定数据库

        • REDIS_HOST = '127.0.0.1'
          REDIS_PORT = 6379
    • 5.修改redis数据库的配置文件--redis数据库文件目录(redis.windows.conf)

      • 在配置文件中改行代码是没有被注释的:

        • bind 127.0.0.1
          #将上述代码注释即可(解除本机绑定,实现外部设备访问本机数据库 如果配置文件中还存在:protected-mode = true,将true修改为false,
          修改为false后表示redis数据库关闭了保护模式,表示其他设备可以远程访问且修改你数据库中的数据
    • 6.启动redis数据库的服务端和客户端

      • CMD运行:redis-server和redis-cli
    • 7.运行项目,发现程序暂定一直在等待,等待爬取任务

    • 8.需要向可以被共享的调度器的队列(redis_key的值)中放入一个起始的url

最新文章

  1. 如何避免git每次提交都输入密码
  2. Python:版本升级
  3. spring MVC @Resource不支持Lazy加载
  4. eclipse系列: Cannot change version of project facet Dynamic web的解决方法
  5. 视频处理控件TVideoGrabber如何重新编码视频
  6. jQuery封装函数
  7. URI与URL的区别
  8. 用PL0语言求Fibonacci数列前m个中偶数位的数
  9. Mybatis 学习历程
  10. 排列的Java递归语言实现
  11. Ubuntu安装ARM架构GCC工具链(ubuntu install ARM toolchain)最简单办法
  12. ios 常用宏(copy)
  13. [pinyin4j] java版汉字转换拼音(大小写)
  14. [SQL基础教程] 2-3 逻辑运算符
  15. 2017/4/26-DOM解析XML文件
  16. APICloud常用模块
  17. Python 下载win32api 模块
  18. asp代码写的,微信会员报名转发分享带上下级和邀约人关系并且能微信支付asp编号的
  19. ubuntu安装虚拟环境
  20. Tools:apache部署https服务

热门文章

  1. JavaSE——String
  2. 面试题 --MySQL事务
  3. 【Go】时间
  4. Vue2 中keyup.enter触发问题!
  5. csv文件导入数据库中文乱码
  6. appcrawler(2.1.3)采坑
  7. Recycle Queue Sample
  8. 读取excel等文件根据注解自动装填为实体类
  9. Selenium私房菜系列9 -- Selenium RC服务器命令行参数列表【VV】
  10. nestjs mongoose关联查询