Python3爬虫关于代理池的维护详解爬虫关于代理池的维护详解
在本篇文章里小编给大家分享了关于Python3爬虫关于代理池的维护详解内容,需要的朋友们可以参考下。
我们在上一节了解了代理的设置方法,利用代理我们可以解决目标网站封 IP 的问题,而在网上又有大量公开的免费代理,其
中有一部分可以拿来使用,或者我们也可以购买付费的代理 IP,价格也不贵。但是不论是免费的还是付费的,都不能保证它
们每一个都是可用的,毕竟可能其他人也可能在用此 IP 爬取同样的目标站点而被封禁,或者代理服务器突然出故障或网络繁
忙。一旦我们选用了一个不可用的代理,势必会影响我们爬虫的工作效率。
所以说,在用代理时,我们需要提前做一下筛选,将不可用的代理剔除掉,保留下可用代理,接下来在获取代理时从可用代理
里面取出直接使用就好了。
所以本节我们来搭建一个高效易用的代理池。
1. 准备工作准备工作
要实现代理池我们首先需要成功安装好了 Redis 数据库并启动服务,另外还需要安装 Aiohttp、Requests、RedisPy、
PyQuery、Flask 库,如果没有安装可以参考第一章的安装说明。
2. 代理池的目标代理池的目标
代理池要做到易用、高效,我们一般需要做到下面的几个目标:
基本模块分为四块,获取模块、存储模块、检查模块、接口模块。
获取模块需要定时去各大代理网站抓取代理,代理可以是免费公开代理也可以是付费代理,代理的形式都是 IP 加端口,尽量
从不同来源获取,尽量抓取高匿代理,抓取完之后将可用代理保存到数据库中。
存储模块负责存储抓取下来的代理。首先我们需要保证代理不重复,另外我们还需要标识代理的可用情况,而且需要动态实时
处理每个代理,所以说,一种比较高效和方便的存储方式就是使用 Redis 的 Sorted Set,也就是有序集合。
检测模块需要定时将数据库中的代理进行检测,在这里我们需要设置一个检测链接,最好是爬取哪个网站就检测哪个网站,这
样更加有针对性,如果要做一个通用型的代理,那可以设置百度等链接来检测。另外我们需要标识每一个代理的状态,如设置
分数标识,100 分代表可用,分数越少代表越不可用,检测一次如果可用,我们可以将其立即设置为100 满分,也可以在原基
础上加 1 分,当不可用,可以将其减 1 分,当减到一定阈值后就直接从数据库移除。通过这样的标识分数,我们就可以区分
出代理的可用情况,选用的时候会更有针对性。
接口模块需要用 API 来提供对外服务的接口,其实我们可以直接连数据库来取,但是这样就需要知道数据库的连接信息,不
太安全,而且需要配置连接,所以一个比较安全和方便的方式就是提供一个 Web API 接口,通过访问接口即可拿到可用代
理。另外由于可用代理可能有多个,我们可以提供随机返回一个可用代理的接口,这样保证每个可用代理都可以取到,实现负
载均衡。
以上便是设计代理的一些基本思路,那么接下来我们就设计一下整体的架构,然后用代码该实现代理池。
3. 代理池的架构代理池的架构
根据上文的描述,代理池的架构可以是这样的,如图 9-1 所示:
评论0
最新资源