scrapy ---分布式爬虫

 导模块

pip install scrapy-redis

 原来scrapy的Scheduler维护的是本机的任务队列(待爬取的地址)+本机的去重队列(放在集合中)---》在本机内存中
如果把scrapy项目,部署到多台机器上,多台机器爬取的内容是重复的 

 流程图


所以实现分布式爬取的关键就是,找一台专门的主机上运行一个共享的队列比如Redis,
然后重写Scrapy的Scheduler,让新的Scheduler到共享队列存取Request,并且去除重复的Request请求,所以总结下来,实现分布式的关键就是三点:
    #1、多台机器共享队列
    #2、重写Scheduler,让其无论是去重还是任务都去访问共享队列
    #3、为Scheduler定制去重规则(利用redis的集合类型)
    
    
# scrapy-redis实现分布式爬虫
    -公共的去重
    -公共的待爬取地址队列

  使用步骤

               from scrapy_redis.spiders import RedisSpider
    1 把之前爬虫类,继承class CnblogsSpider(RedisSpider):


     2 去掉起始爬取的地址,加入一个类属性

        去掉它:start_urls = ["https://www.cnblogs.com"] #爬取的初始地址    
        redis_key = 'myspider:start_urls'  # redis列表的key,后期我们需要手动插入起始地址  


     3 配置文件中配置

          scrapy redis去重类,使用redis的集合去重        
        DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"


        不使用原生的调度器了,使用scrapy_redis提供的调度器,它就是使用了redis的列表
                SCHEDULER = "scrapy_redis.scheduler.Scheduler"
                REDIS_HOST = 'localhost'                            # 主机名
                REDIS_PORT = 6379                                   # 端口
                ITEM_PIPELINES = {
       # 'mysfirstscrapy.pipelines.MyCnblogsPipeline': 300,
       'mysfirstscrapy.pipelines.MyCnblogsMySqlPipeline': 301,
        'scrapy_redis.pipelines.RedisPipeline': 400,
    }
        
    # 再不同多台机器上运行scrapy的爬虫,就实现了分布式爬虫

      4.将初始爬取的地址传到redis队列中---cmd启动redis

lpush key value [value ...]

key------就是第二步  redis_key对应的值

value--------就是爬取的地址初始地址

        分布式爬虫 - 刘清政 - 博客园 (cnblogs.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Win10电脑开机PIN码怎么取消?

有的用户稀里糊涂的设置了PIN码之后,在开机时发现多了个PIN码,但又不知道电脑PIN码是什么意思,也不清楚开机PIN码怎么取消。您可以通过阅读以下内容,以了解什么是PIN以及如何取消PIN码。 PIN码是一种快捷登录密码方式,…

云计算的学习(六)

六、云计算的发展趋势 1.云计算相关领域介绍 1.1物联网 物联网来源于互联网,是万物互联的结果,是人和物、物和物之间产生通信和交互。 物联网主要技术: RFID技术(射频识别技术)传感器技术嵌入式系统技术 1.2大数据…

win系统电脑在线打开sketch文件的方法

自Sketch诞生以来,只有Mac版本。Windows计算机如何在线打开Sketch文件? 即时设计已经解决了你遇到的大部分问题,不占用内存也是免费的。 您可以使用此软件直接在线打开Sketch文件,完整预览并导出CSS、SVG、PNG等,还具…

【工具推荐】企业微信、企业飞书接口调用工具

github地址: GitHub - fasnow/idebug: 企业微信、企业飞书接口调用工具。 简介 企业微信、企业飞书接口调用工具。 使用方法 wechat模块 使用use wechat 选择模块。 首先设置corpid和corpsecret,如有需要可以设置代理,之后再执行run命令。 导出通信…

微信小程序设置底部导航栏

微信小程序设置底部导航栏 1、前言2、图标准备3、小程序tabbar设置 1、前言 我们先来看下效果图: 注意: 导航栏数量最多5个,最少两个。 2、图标准备 阿里图标库 http://www.iconfont.cn/collections/show/29 我们进入该网站,选…

在SpringBoot中对RabbitMQ三种使用方式

基于API的方式 1.使用AmqpAdmin定制消息发送组件 Autowiredprivate AmqpAdmin amqpAdmin;Testpublic void amqpAdmin(){//1.定义fanout类型的交换器amqpAdmin.declareExchange(new FanoutExchange("fanout_exchange"));//2.定义两个默认持久化队列,分别处理email和sm…

macOS 怎么安装redis数据库

1 访问redis数据库下载网址 http://download.redis.io/releases/ 访问上述的redis下载的网址,确定你想要的版本 然后下载即可 (我选则的是6.2.6) 然后下载 下载后 把这个文件解压,放在自己想要放在的位置 2 打开终端 输入对应的…

MyBatis查询数据库(1)

前言🍭 ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 经过前⾯的学习咱们 Spring 系列的基本操作已经实现的差不多了&#xff0…

论文浅尝 | 少样本学习的语言模型的持续训练

笔记整理:王贵涛,东南大学硕士,研究方向为自然语言处理 链接:https://github.com/UIC-Liu-Lab/CPT 一、动机 克服灾难性遗忘(CF)是持续学习(CL)的一个主要目标。目前有许多方法&…

物流企业「营销服」数字化转型,看这篇文章就够了

物流和供应链企业不仅和生产环节紧密相连,还与消费者需求息息相关,通过高度整合和融合运输、仓储、分拨、配送、信息等服务功能,为延伸产业链、提升价值链、构建供应链提供了关键支持。物流企业在推进现代流通体系、促进国内市场强大发展、推…

Linux —— 进程介绍

目录 一,进程介绍 二,进程使用 进程查看 通过系统调用获取进程标识符 通过系统调用创建进程 fork 一,进程介绍 进程是正在执行的程序或命令,每个进程都是一个运行的实体或程序的执行实例,有自己的地址空间&#x…

Win10,WinServer16,DNS,Web ,域 环境配置 周总结 (温故而知新 可以为师矣 第十五课)

Win10,WinServer16,DNS,Web ,域 环境安装 (第十五课) 创建虚拟机安装windowserver2016服务器(NETBASE第二课)_星辰镜的博客-CSDN博客 创建台虚拟机并安装上window10系统(NETBASE 第一课)_window 虚拟机_星辰镜的博客-CSDN博客配置通过域名访问网站(NET…

40.RocketMQ之高频面试题大全

消息中间件如何选型 RabbitMQ erlang开发,对消息堆积的支持并不好,当大量消息积压的时候,会导致 RabbitMQ 的性能急剧下降。每秒钟可以处理几万到十几万条消息。 RocketMQ java开发,面向互联网集群化功能丰富,对在线业…

行业追踪,2023-07-10,汽车零部件如期调整,需要耐心等待第二波

自动复盘 2023-07-10 成交额超过 100 亿 排名靠前,macd柱由绿转红 成交量要大于均线 有必要给每个行业加一个上级的归类,这样更能体现主流方向 rps 有时候比较滞后,但不少是欲杨先抑, 应该持续跟踪,等 macd 反转时参与…

input输入日期时间,自动格式化组件/工具

input输入日期时间,自动格式化组件/工具 组件/工具使用说明 只能输入日期时间,不能选择日期时间格式 yyyy-MM-dd HH:mm:ss基于VUE框架输入效果见下图 组件/工具解决的痛点 组件库日期时间组件,选日期时间很花时间 例如想快速得到 2021-1…

golang关于成员变量使用:=

错误 错误原因 结构体成员变量不能与:一起用,这是一个语法错误。

C#(五十八)之C#List

前几天&#xff0c;看同事写的代码中有list相关的字眼&#xff0c;百度了一下&#xff0c;原来是C#中list泛型集合。 了解一下。 List&#xff1a;泛型集合&#xff0c;List<T>类是 ArrayList 类的泛型等效类。该类使用大小可按需动态增加的数组实现 IList<T> 泛型…

arcgis拓扑检查

不能有悬挂点 不能有伪结点***路网处理很重要&#xff0c;看研究吧。 一直默认到最后。 导入要素类&#xff0c;单个 toupu2右键新建拓扑&#xff08;T&#xff09; 一般选不能有悬挂点&#xff0c;不能重叠。 一路默认 是 拉进图层可视化 线要素的话记得添加字段length&#…

OSPF和VLAN综合实验

目录 题目 1.IP地址的规划设计 2.搭建拓扑并进行基础IP配置 3.配置虚拟局域网 1&#xff09;按子网划分要求配置PC1和PC2 检测&#xff1a;输入[SW1]display vlan进行检查 配置路由器R3 检测&#xff1a;用PC1去访问PC2 2&#xff09;配置拓扑中其余路由器的网关以及回…

使用RabbitMQ

使用RabbitMQ 1 Docker安装RabbitMQ 1.1 安装RabbitMQ # 下载含有管理页面的镜像 docker pull rabbitmq:3.8.8-management# 创建容器 # 5672&#xff1a;应用访问端口&#xff1b;15672&#xff1a;控制台Web端口号&#xff1b; docker run -itd \ --namemy-rabbitmq \ --re…