【学习笔记】python爬虫---代理池

背景:崔庆才的爬虫学习笔记

整体架构:

 

获取模块【各大网址爬取代理】----->存储模块【redis有序集合存储】<==========>检测模块

                                                                    ||

                                                                    V

                                                       接口模块【web接口】

 

============================================================================================

创建代理池项目

项目结构如下:

第一:存储模块

1、存储模块,选中redis数据库中的有序集合。

------------------------------------------------------------------------------------------------------------------------

说明:1、redis有序集合:

  •                 a、有序集合,有键值对构成的数据集合,键又叫成员member,值又叫分值score。
  •                 b、分值必须是浮点数/整数型,并且按照分值的由低到高排序。
  •                 c、键【member】必须唯一,分值可重复

            例子:键【member】:220.12.23.62 :6666      值【score】:98

-------------------------------------------------------------------------------------------------------------------------

2、代理作为键【member】,每个代理设置对应的值【score】

       a、初始值init_score设置为10

       b、最大值设置为100

       c、检测不通过减一分,通过设置满分,得分为0自动删除

3、定义一个类RedisClient()实现如下功能

a、一旦实例化该类,自动初始化【连接数据库】,并作为该实例的一个属性

b、类实现以下方法:

   4、相关代码

import redis
from proxy_pool_new.settings import REDIS_HOST,REDIS_PORT,REDIS_PASSWORD,REDIS_KEY
from proxy_pool_new.settings import MAX_SCRORE,MIN_SCORE,INITIAL_SCORE
from proxy_pool_new.error import PoolEmptyerror
from random import choice
import re
from .logger_proxy import mylogger
logger=mylogger.get_logger(name='db')

class RedisClient(object):
    def __init__(self, host=REDIS_HOST, port=REDIS_PORT, password=REDIS_PASSWORD):
        """
        初始化
        :param host: redis 地址
        :param part: redis 端口
        :param password: redis 密码
        decode_responses=True,写入的键值对中的value为str类型,不加这个参数写入的则为字节类型。
        例子:不加,结果前多一个b,    b'hello world'
        """
        self.db = redis.StrictRedis(host= host, port=port, password=password, decode_responses=True)

    def add(self,proxy,score=INITIAL_SCORE):#score  已经又默认值,如果不特别指定
        """
        添加代理,至代理池,并设置初始分值
        :param proxy: 获取的单个代理
        :param intial_socore: 初始评分值
        :return:
        """
        if not re.match('\d+\.\d*\.\d*\.\d+\:\d*',proxy):
            logger.info('不符合规范 %s' % proxy)
            return
        if not self.db.zscore(REDIS_KEY,proxy):
            logger.info('代理添加到数据库')
            #
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值