分布式爬虫架构_分布式爬虫工具有哪些

分布式爬虫架构_分布式爬虫工具有哪些目录分布式爬虫框架消息队列Redis和Scrapy-Redis分布式爬虫框架分布式爬虫框架分为两种:控制模式(左)和自由模式(右):控制模式中的控制节点是系统实现中的瓶颈,自由模式则面临爬行节点之间的通信处理问题。因此,在实际工程中,我们通常使用混合模式:各个爬行节点有各自的功能(爬取的对象不同),它们都注册到一个服务节点上,服务节点能分辨各个爬行节点的分工,用户的请求存放在队列中,处理不同请求的程序从队列中取出请求,然后询问服务节点,由服务节点分配爬行节点给请求的处理程序。下面介绍分布式爬

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

分布式爬虫框架

分布式爬虫框架分为两种:控制模式(左)和自由模式(右):
fig1
控制模式中的控制节点是系统实现中的瓶颈,自由模式则面临爬行节点之间的通信处理问题。因此,在实际工程中,我们通常使用混合模式:

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

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

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

Jetbrains全家桶1年46,售后保障稳定

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/222401.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Qt多线程1:QThread

    Qt多线程1:QThreadQt有两种多线程的方法,其中一种是继承QThread的run函数,另外一种是把一个继承于QObject的类转移到一个Thread里。Qt4.8之前都是使用继承QThread的run这种方法,但是Qt4.8之后,Qt官方建议使用第二种方法。两种方法区别不大,用起来都比较方便,但继承QObject的方法更加灵活。这里要记录的是如何正确的创建一个线程,特别是如何正确的退出一个线程。

    2022年5月28日
    33
  • python django 数据库_Apache+Mysql+PHP/Python简单项目

    python django 数据库_Apache+Mysql+PHP/Python简单项目基于Python+Django+mysql的实验室设备管理系统当今时代是飞速发展的信息时代,在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统环境原因。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。高校的实验室设备管理水平和实验室设备管理规模日益成为反映高校综合实…

    2022年10月9日
    0
  • pycharm运行tkinter结果窗口_pycharm运行py文件

    pycharm运行tkinter结果窗口_pycharm运行py文件对于3.x版本中运行thinter问题1:ModuleNotFoundError:Nomodulenamed‘Tkinter’引入的模块没有这个Tkinter这个名字出现的问题2:AttributeError:module‘tkinter’hasnoattribute‘TK’问题原因:调用的属性书写不正确正确的书写importthinter#都是小写的T…

    2022年8月27日
    2
  • python爱心代码制作_python如何编出一个爱心文字

    python爱心代码制作_python如何编出一个爱心文字[M][fts=2][ftc=F7941D]╭╮╭╮[/ft][ftc=F7941D]╭╮╭╮[/ft]\[ftc=FFF100]∨[/ft]/\[ftc=FFF100]∨[/ft]/([ftc=00BFF3]≥[/ft]﹏[ftc=00BFF3]≤[/ft])([ftc=EF6EA8]≥[/ft]﹏[ftc=EF6EA8]≤[/ft])/[ftc=…

    2022年10月18日
    0
  • 歌曲的BPM (Beat Per Minute)–每分钟节拍数[通俗易懂]

    歌曲的BPM (Beat Per Minute)–每分钟节拍数[通俗易懂]foobar2000解决舞曲挑选

    2022年8月1日
    3
  • 数论狄利克雷定理_shx函数

    数论狄利克雷定理_shx函数狄利克雷函数dirac在Matlab中使用Syntaxd=dirac(x)d=dirac(n,x)d=dirac(x)representstheDiracdeltafunctionofx.d=dirac(n,x)representsthenthderivativeoftheDiracdeltafunctionatx.dirac(t)这表示关于ttt的狄利克雷函数dirac(1,t)dirac(2,t)因此,这两个分别表示关于

    2022年9月4日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号