![](/index/img/qc-side/indexLogo4.png)
qq:800819103
在线客服,实时响应![](/index/img/qc-side/indexLogo5.png)
qq群
在线客服,实时响应![](/index/img/qc-side/indexLogo6.png)
客服电话
13318873961概述历时大致两个月,到现在终于完成了高可用分布式代理IP池(https://github.com/SpiderClub/haipproxy),目前开源在了Github上。写这个项目的原因主要有两点,一是自己平时的部分工作需要和爬虫打交道,代理IP在有的时候可以发挥非常重要的作用,调研过一些开源的代理IP采集程序,发现在抓取、解析、校验、资源调度等这些方面总有一些不尽人意的地方;二是和一个网友(不严格的说算得上是伯乐)的交流让我有了关于使用Scrapy来写分布式爬虫的一些想法,正好可以借助这个机会来尝试证实这些想法。
架构设计
这篇文章的目的是阐述haipproxy的主要架构和流程。该项目关键部分是
基于Scrapy和Redis的分布式爬虫,用作IP抓取和校验,对应于项目的crawler
基于Redis实现的分布式任务调度工具,对应于项目的scheduler和redis_util.py
Crawler分为代理抓取和校验,两者实现思想类似,主要使用Scrapy的spider_idle信号和DontCloseSpider异常来阻止Scrapy在没有数据的时候关闭,灵感来自scrapy-redis(https://github.com/rmax/scrapy-redis)。为了方便阐述,我画了一张包含各个组件的流程图,如下
启动调度器,包括代理爬虫调度器和校验爬虫调度器。调度器会读取rules.py中待抓取的网站,将其编排成任务存入各个任务队列中
启动各个爬虫,包括IP抓取和校验程序。项目中爬虫和调度器都是高可用的,可以根据实际情况进行分布式部署,无需改动代码。由于本文的目标不是写成该项目的详细使用文档,所以省略了如指定启动爬虫类型和调度器类型的介绍
代理IP采集爬虫启动后会到对应的任务队列中获取任务并执行,再把获取到的结果存入一个init队列中
init队列由一个特殊的校验器HttpbinInitValidator进行消费,它会过滤掉透明代理,再把可用代理输入各个Validated队列中
调度器会定时从Validated队列中获取代理IP,再将其存入一个临时的队列。这里用一个临时队列是为了让校验更加公平,如果直接从Validated队列中获取资源进行校验,那么会增大不公平性
这时候各个校验器(非init校验器)会从对应的临时队列中获取待校验的IP并对其进行校验,此处省略校验细节
校验完成后再将其放回到Validated队列中,等待下一轮校验
请求成功率(体现为分数)、响应速度和最近校验时间满足settings.py所配置要求的代理IP将会被爬虫客户端所消费
为了屏蔽各个调用语言的差异性,目前实现的客户端是squid客户端,它可以作为爬虫客户端的中间件
到此,整个流程便完了。
效果测试
以单机模式部署haipproxy和测试代码(https://github.com/SpiderClub/haipproxy/blob/master/examples/zhihu/zhihu_spider.py),以知乎为目标请求站点,
每一万条成功请求为统计结果,实测抓取效果如下
可见haipporxy的代理效果还算不错,在开始的时候可以达到1w/hour的请求量,几个小时候请求量请求量
降为了5k/hour。降低的结果可能有三个:
(1)随着数据量的增大,Redis的性能受到了一定的影响;
(2)知乎校验器在把Init Queue中的代理消费完之后,由于是定时任务,所以导致某段时间内新鲜的IP空缺。而免费IP大多数都是短效的,所以这段时间出现了IP的空缺;
(3)由于我们采用的是greedy模式调用IP,它的调用策略是: 高质量代理IP会一直被调用直至该代理IP不能用或者被封,而低应速度IP会轮询调用。这也可能导致高质量IP的空缺。
可见IP校验和调用策略还有很大的优化空间。希望志同道合的朋友加入进来一起优化,这也挺有意思的。
相关文章内容简介
1 高可用分布式代理IP池:架构篇
概述历时大致两个月,到现在终于完成了高可用分布式代理IP池(https://github.com/SpiderClub/haipproxy),目前开源在了Github上。写这个项目的原因主要有两点,一是自己平时的部分工作需要和爬虫打交道,代理IP在有的时候可以发挥非常重要的作用,调研过一些开源的代理IP采集程序,发现在抓取、解析、校验、资源调度等这些方面总有一些不尽人意的地方;二是... [阅读全文]
最新标签
推荐阅读
27
2019-05
代理IP的技术优势
如果去网上搜索代理IP的话,会搜索到很多相对用的代理IP软件,这些软件都是用来更换IP的,之所以有如此多的软件,是因为代理IP技术在网络中应用得很广泛。代理IP技术是更换IP的技术,可以
25
2019-08
网络爬虫是否一定需要爬虫代理IP
一部分爬虫工作者说:爬虫使用爬虫代理IP会好一些,也有部分说没有代理IP一样也可以,那么让他们说这种话得原因是什么呢?
24
2019-04
使用换IP软件有什么优势?
目前,在互联网世界活跃着这么一群人,他们需要人工注册、需要网页拥有大量的阅读量、需要不同的IP地址去投票点击等等,然而,一个人的力量是有限的,而发动数千上万人帮忙也是天方
03
2019-01
动态ip不能获取到ip地址怎么解决?
虽说互联网无处不在,但许多人都不知晓不能上网如何解决,例如如何设置网络连接,读取不到IP该怎么办,如何修改ip地址等等。这些难题可能和线路联接、IP发生冲突、服务提供商绑定及其WA
热门文章