分布式爬虫框架

news2024/12/28 20:37:20

分布式爬虫框架分为两种:控制模式(左)和自由模式(右):

控制模式中的控制节点是系统实现中的瓶颈,自由模式则面临爬行节点之间的通信处理问题。因此,在实际工程中,我们通常使用混合模式:

  • 各个爬行节点有各自的功能(爬取的对象不同),它们都注册到一个服务节点上,服务节点能分辨各个爬行节点的分工,用户的请求存放在队列中,处理不同请求的程序从队列中取出请求,然后询问服务节点,由服务节点分配爬行节点给请求的处理程序。

下面介绍分布式爬虫框架的几个重要模块;

URL Manager:爬虫系统的核心。负责URL的重要性排序,分发,调度,任务分配。单个的爬虫完成一批URL的爬取任务之后,会找 URL Manager要一批新的URL。一般来说,一个爬取任务中包含几千到一万个URL,这些URL最好是来自不同的host,这样,不会给一个 host在很短一段时间内造成高峰值。

Content Acceptor:负责收集来自爬虫爬到的页面或是其它内容。爬虫一般将爬取的一批页面,比如,一百个页面,压缩打包成一个文件,发送给Content Acceptor。Content Acceptor收到后,解压,存储到分布式文件系统或是分布式数据库,或是直接交给 Content Parser(比如基于BS4写的脚本)去分析。

Proxy Manager:负责管理系统用到的所有Proxy,说白了,负责管理可以用来爬取的IP。爬虫询问Proxy Manager,得到一批 Proxy IP,然后每次访问的时候,会采用不同的IP。如果遇到IP被屏蔽,即时反馈给Proxy Manager,Proxy Manager会根据哪个host屏蔽了哪个IP做实时的智能的调度。

分布式爬虫其实和单机爬虫是一样的,只不过分布式爬虫把工作分配到不同的机器上执行,scrapy是用于单机爬虫的框架。

消息队列

分布式爬虫中节点的通信是一个重要问题,所以需要消息队列。

消息队列:消息被发送到队列中。“消息队列”是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。

消息队列封装了任意节点之间的通信路径。节点只需把消息发送到消息队列就做下一步工作,而不是关心是否成功发送到某个目标节点。

通过消息队列,应用程序可独立地执行–它们不需要知道彼此的位置、或在继续执行前不需要等待接收程序接收此消息。通过消息队列,应用程序可独立地执行。

Redis和Scrapy-Redis

Redis是一个开源的使用C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Key-Value的形式适合构建消息队列。

scrapy-redis是为了更方便地实现scrapy分布式爬取,而提供了一些以redis为基础的组件。

安装方式:

pip install scrapy-redis

 

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

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

相关文章

go语言命令行工具cobra

go语言命令行工具cobra 1、Cobra 介绍 Cobra 是关于 golang 的一个命令行解析库,用它能够快速创建功能强大的 cli 应用程序和命令行工具。 cobra既是一个用于创建强大现代CLI应用程序的库,也是一个生成应用程序和命令文件的程序。cobra被用在很多 go…

【从球开始渲染小姐姐】DAY1----用blender捏一个小姐姐

Building Blender/Windows - Blender Developer Wikihttps://wiki.blender.org/wiki/Building_Blender/Windows How to build Blender on Windows? - YouTubehttps://www.youtube.com/watch?vb6CtGm4vbng bf-blender - Revision 63388: /trunk/lib/win64_vc15https://svn.b…

DJ4-6 虚拟存储器的基本概念

目录 4.6.1 虚拟存储器的引入 1、常规存储器管理方式的特征 2、内存的扩充方法 4.6.2 局部性原理 4.6.3 虚拟存储器的定义 1、虚拟存储器的基本工作情况 2、虚拟存储器的定义 3、虚拟存储器的实现方法 4.6.4 虚拟存储器的特征 基本分页和基本分段不能解决的问题&a…

snpEFF和bedtools基因注释有何异同?

大家好,我是邓飞,现在写博客越来越繁琐了,每个平台对图片都有自己的规则,不能通用,各种找不到图片,本着充值是我变强的原则,买了Markdown Nice的VIP(https://product.mdnice.com/&am…

自然语言处理从入门到应用——自然语言处理(Natural Language Processing,NLP)基础知识

分类目录:《自然语言处理从入门到应用》总目录 自然语言通常指的是人类语言,是人类思维的载体和交流的基本工具,也是人类区别于动物的根本标志,更是人类智能发展的外在体现形式之一。自然语言处理(Natural Language Pr…

C Primer Plus第十四章编程练习答案

学完C语言之后,我就去阅读《C Primer Plus》这本经典的C语言书籍,对每一章的编程练习题都做了相关的解答,仅仅代表着我个人的解答思路,如有错误,请各位大佬帮忙点出! 由于使用的是命令行参数常用于linux系…

LeetCode:1143.最长公共子序列 1035.不相交的线 53. 最大子序和

1143.最长公共子序列 题目 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除…

字节和滴滴划水5年,总结出来的真实经验....

先简单交代一下背景吧,某不知名 985 的本硕,17 年毕业加入字节,之后跳槽到了滴滴,一直从事软件测试的工作。之前没有实习经历,算是5年的工作经验吧。 这5年之间完成了一次晋升,换了一家公司,有…

基础巩固(四)View体系与事件分发

文章目录 Android窗口机制ViewRootWindow、WindowManager、ViewRoot、Activity、DecorView之间的关系ViewView的生命周期Attachment / DetachmentTraversalsState Save / Restoreinvalidate()和requestLayout() View的生命周期与Activity的生命周期的关联Activity创建时如何关联…

[深度学习]yolov7 pytorch模型转onnx,转ncnn模型和mnn模型使用细节

文章目录 前言1.前置1.1 安装必要的库1.2 .pt 权重转ncnn 和mnn所需要的权重 2、编码C项目1.ncnn2.mnn 总结 前言 yolov7 pytorch模型转onnx,转ncnn模型和mnn模型使用细节,记录一下 git仓库: yolov7 https://github.com/WongKinYiu/yolov7 n…

JQL的语法格式

JQL&#xff08;Jira Query Language&#xff09;的语法格式如下&#xff1a; <field> <operator> <value> 其中&#xff0c; 表示 Jira 中的字段&#xff08;例如 project、assignee、status 等&#xff09;&#xff0c; 表示操作符&#xff08;例如 、!、&…

uni-app路由进阶—不同路由跳转配置的使用

uni-app路由进阶—不同路由跳转配置的使用 uni-app路由进阶—不同路由跳转配置的使用 文章目录 uni-app路由进阶—不同路由跳转配置的使用前言一、配置2个一级导航页面&#xff08;tabBar&#xff09;二、路由配置分类总结 前言 UNI-APP学习系列之uni-app路由进阶—不同路由跳…

SQL注入基本原理

1、什么是Sql注入攻击 SQL注入攻击通过构建特殊的输入作为参数传入Web应用程序&#xff0c;而这些输入大都是SQL语法里的一些组合&#xff0c;通过执行SQL语句进而执行攻击者所要的操作&#xff0c;它目前是黑客对数据库进行攻击的最常用手段之一。 本课程将带你从介绍 Web 应用…

ELK日志采集系统搭建

需求背景 现在的系统大多比较复杂&#xff0c;一个服务的背后可能就是一个集群的机器在运行&#xff0c;各种访问日志、应用日志、错误日志量随着访问量和时间会越来越多&#xff0c;运维人员就无法很好的去管理日志&#xff0c;开发人员排查问题&#xff0c;需要到服务器上查…

赛灵思 ZYNQ UltraScale+ MPSoC Petalinux驱动开发:EMIO-GPIO输入驱动

目录 Zynq UltraScale MPSoC Linux下EMIO-GPIO驱动1、MPSOC GPIO简介2、vivado中EMIO配置3、EMIO设备树修改 Zynq UltraScale MPSoC Linux下EMIO-GPIO驱动 声明&#xff1a;本文是学习赛灵思 Zynq UltraScale MPSoC 5EV过程中写的笔记&#xff0c;便于以后复习&#xff0c;参考…

基于Faster R-CNN实现目标检测

目录 1. 作者介绍2. Faster RCNN基本框架3.模型训练及测试3.1 数据集3.2 环境配置3.3 训练参数3.4 训练参数3.5 代码展示3.6 问题及分析 参考&#xff08;可供参考的链接和引用文献&#xff09; 1. 作者介绍 杨金鹏&#xff0c;男&#xff0c;西安工程大学电子信息学院&#x…

Mybatis-puls——入门案例和概述和CURD功能实现

前言 虽然但是&#xff0c;现在MyBatis_puls并不支持springboot3.x版本。 MyBatis_puls就像SpringBoot是为了快速开发Spring程序一样&#xff0c;这个是为了快速开发MyBatis程序。基于SpringBoot使用MP的开发流程 按照下面这个模板造就对了。 SpingBoot——SB整合MB的web项…

Profinet通信协议基础知识

目录 1、Profinet是PI退出的开放式以太网标准: 2、Profinet的参考模式 3、Profinet的应用领域

若依框架快速搭建(一)

若依框架开发 若依框架介绍前期准备相关工具IDEAwebstromNavcatMavenRedis 前后端项目搭建 后端搭建前端搭建源码下载 若依框架介绍 若以管理系统的网址&#xff1a;http://ruoyi.vip/ 代码为开源代码 主要分为四部分&#xff0c;第一个是整体项目&#xff0c;第二个是前后端…

UFS 3 - UFS RPMB

UFS 1-UFS RPMB 1 RPMB介绍2 RPMB Well Known Logical Unit Description3 Requirements3.1 RPMB Resources3.2 Algorithm and Key for MAC Calculation3.3 RPMB Message Components3.4 Request Message Types3.5 Response Message Types3.6 RPMB Operation Result 4 Implementa…