增量式与分布式爬虫

本文介绍了如何安装redis以支持分布式爬虫,并详细讲解了使用scrapy-redis创建分布式爬虫的过程,包括配置调度器、管道以及启动步骤。此外,还探讨了增量式爬虫的两种实现方式:基于URL和基于数据指纹,提供了相应的代码演示。
摘要由CSDN通过智能技术生成

分布式爬虫

redis安装

  • 用户自定义目录,也就是你想安装的位置,新建一个文件夹,注意你的路径里不要有中文
  • 将redis-x64-3.2.100.zip压缩包 解压到你当前新建的文件夹里
  • 将解压的文件的路径复制 并 配置到环境变量中
  • 右击此电脑点击属性找到高级设置,然后点环境变量—系统变量—双击path—新建–粘贴路径即可

分布式

  • 分布式爬虫

    • 多台服务器机群,共同爬取数据
    • 适用于数据量较大
    • 提高了成本
  • 原生scrapy 不能实现分布式,要通过scrapy-redis

    • scrapy-redis提供了共享的调度器
    • scrapy-redis提供了共享的管道
  • 使用scrapy实现分布式的思路

    • 为原生的scrapy框架提供共享的管道和调度器
    • pip install scrapy-redis
  • 配置及创建项目

    • 创建工程

      • scrapy startproject projectname
    • 爬虫文件

      • scrapy genspider -t crawl spidername www.baidu.com
    • 修改爬虫文件

      • 导包:from scrapy_redis.spiders import RedisCrawlSpider
      • 将当前爬虫类的父类进行修改RedisCrawlSpider
      • allowed_demains,start_urls 注释掉,添加一个新属性redis_key=“qn”(调度器队列的名称)
      • 指定redis_key = ‘xxx’,即共享调度器队列名字
      • lpush xxx url
      • 数据解析:将解析的数据封装到item中然后向管道提交
    • 配置文件的编写

      • 指定管道

      • ITEM_PIPELINES = {
           'scrapy_redis.pipelines.RedisPipeline': 400,
        }
        
      • 指定调度器

        # 增加了一个去重容器类的配置,作用使用redis的set集合来存储请求的指纹数据,从而实现请求去重的持久化
        DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
        # 使用scrapy-redis组件自己的调度器
        SCHEDULER = "scrapy_redis.scheduler.Scheduler"
        # 配置调度器是否要持久化,也就是当爬虫结束了,要不要清空redis中请求队列和去重指纹的set,如果是True,就表示要持久化存储,就不清空数据,否则清空数据
        SCHEDULER_PERSIST = True
        
        
      • 指定具体的redis

        REDIS_HOST = 'redis服务器的ip地址'
        REDIS_PORT = 6379
        
      • 修改redis配置并指定配置启动

        • bind 127.0.0.1
        • protected-mode no

        • 开启redis服务(携带redis的配置文件:redis-server ./redis.window.conf)和客户端(redis-cli)

      • 启动程序:scrapy runspider xxx.py(需要进入spider文件夹)

      • 向调度器队列中扔入一个起始的url(redis的客户端):lpush xxx www.xxx.com (xxx表示的就是redis_key的值)

在这里插入图片描述

代码演示

  • 爬虫文件中

     import scrapy
     from scrapy.linkextractors import LinkExtractor
     from scrapy.spiders import CrawlSpider, Rule
     
     from scrapy_redis.spiders import RedisCrawlSpider
     from fbsspider.items import FbsspiderItem
     
     class SunaskSpider(RedisCrawlSpider):
         # 爬虫名虽然运行时不再使用,但是不能删(******)
         name = 'sunask'
         # allowed_domains = ['baidu.com']
         # start_urls = ['http://baidu.com/']
         # 共享调度器
         redis_key = 'sch'
         # http: // wz.sun0769.com / index.php / question / questionType?type = 4 & page = 30
         link = LinkExtractor(allow=r'http://wz.sun0769.com.*?page=\d+')
         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值