Python3网络爬虫课程9.5存储模块的实现

存储模块

我们使用 Redis 的有序集合来存储 Proxy,集合中的每个元素都是不重复的,对 Proxy 池来说,集合的元素就是一个个 Proxy,即 IP:PORT 的形式,这样的一个形式就是集合中的一个元素。

此外,有序集合的每个元素会有一个分数,分数是可以重复的,可以是浮点类型,也可以是整形,这个集合会对根据每一个元素的分数进行排序,分数小的排前面,分数大的排后面。

对于我们的 Proxy 池来说,这个分数可以作为一个判断 Proxy 是否可用的标识,100 分最高,表示可用,0 最低,表示不可用。

我们从 Proxy 池中随机获取 Proxy,这样就可以保证每个 Proxy 都可以被调用到。

分数是我们判断代理池是否稳定可用的标识,规则如下:

分数一百标识当前 Proxy 可用,检测器循环检测每个 Proxy,一旦检测到又可用 Proxy,立即将其分数设置为一百;如果 Proxy 不可用,则将其分数减一,一旦分数为零后,立即删除此 Proxy。

新获取的 Proxy 分数为十, 如果测试可行,分数立即设置为一百,如果不可行,则其分数减一,直至减为零后移除此 Proxy。

打开凤凰新闻,查看更多高清图片

MAX_SCORE: 表示最大分数

MIN_SCORE: 表示最小分数

INIT_SCORE: 初始分数

REDIS_HOST: redis 主机地址

REDIS_PORT: redis 服务端口

REDIS_PASSWORD: redis 服务密码

REDIS_KEY: 集合键名

init()初始化方法,初始化 Redis 链接对象

add()方法向数据库添加 Proxy 并设置初始分数 INIT_SCORE

random()方法随机放回 Proxy

decrease()方法将分数减一,如果分数为零,则移除

exsits()方法判断 Proxy 是否在集合中

max()方法将 Proxy 的分数设置为 MAX_SCORE

count()方法返回集合中元素的个数

all()方法返回所有的 Proxy 列表