为什么要整代理池
我们购买代理的时候不是可以直接配置好代理就可以直接用了吗?为什么还要去设计代理池。
- 为了更高的并发
因为代理商提供的接口往往并发量并不是很高,假如我们需要更高的并发,那一般情况下就是需要维护一个代理池。 - 为了保证代理的有效性
有时候代理质量参差不齐,如果业务上需要保证代理的高可用,有一个设计良好的代理池将会保证请求的质量。
设计代理池
模块分为4个:
获取模块
通过代理商提供的接口或者免费代理页面上的获取ip,抓取完成之后交由存储模块进行存储。存储模块
存储模块用于存储我们抓下来的代理,这里要注意去重,而且还要给个标记位用来标记代理可用情况。还有个重要点那就是要保证好速度,做到实时处理,既然追求速度,直接上redis,而且为了保证好我们获取到的代理的质量一定是高的,我们可以采取打分制度,质量越高,分数越高排名也就越靠前,那我们直接使用Redis的Sorted Set就可以达到去重和自动排序的效果。检测模块
检测模块,顾名思义用来做检测ip可用性的,需要爬哪个就检测哪个网站,这样针对性高,可用性也更可靠。如果是要做通用代理,最简单直接的直接请求百度。刚才我们也说了要给ip打分,当我们检测的次数越少,分数也就越高,当我们设置的初试分数被减为0时,移除ip。
接口模块
接口模块是用于提供服务的,一般代理池开启一个接口供爬虫程序进行访问然后获取代理,然后更换代理。也就是说代理是一个程序,爬虫是一个程序,是分开的。