爬虫篇(10)权重代理池

本文介绍了权重代理池的设计和实现,主要用于爬虫项目中,确保大量代理IP在多线程间均匀分布并及时清理无效IP。文章涵盖应用场景、设计逻辑、接口模块和定时模块的详细说明,并提供了代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

权重代理池是之前工作为采集亚马逊而开发,这个模块以后应该用不上了,但也是花了一些心力开发的,故写下这篇博客,一来纪念,二来分享,栽树方便于后人

应用场景

将大量代理IP(10到80个)分发到多线程(100到500),尽可能保证IP被均匀分布,并且能及时清理无用代理IP,因为线程数大于ip数,故不能用队列。

要求环境

本地或内网Redis、Python

设计逻辑

分两个模块:定时模块与接口模块

1、接口模块:

        获取接口(get_proxy):调用接口从redis数据中获取一个ip,获取时会加锁(故需要本地或内网Redis)防止一个ip同时被多个线程获取,ip被获取后该ip权重值加一。ip获取为概率获取,非随机获取,权重值越低被获取概率越大(参考y=1/x反比例函数图)

        异常接口(send_error):接收一个异常IP和异常类型(需从程序中主动调用该接口,如请求无响应、出现robot界面时),程序会根据异常类型增加该IP权重值(默认为“other”,即增加50权重值)

2、定时模块:

        定时拉取代理ip,存入redis,并清除权重超过阈值和超时的ip,一个代理池会存两张表:权重表(proxy_pool_001)和时间表(proxy_pool_act_001),由“redis有序集合”实现自动排序。为防止新ip因权重过低被大量获取,故新ip初始权重为redis中权重最低ip的权重,下限200(可自行调整)。

运行截图:

代码部分

(整理好的简单可以跑的的demo,如需应用到线上环境自行阅读修改代码):

定时模块

import time
import redis
import requests
import traceback
from loguru import logger


poxys_dic = [
    {"name": "代理池01",
     "url": "xxxxxxxxxxxxxxxxxx",
     "pool_name": "proxy_pool_001",
     "pool_act_name": "proxy_pool_act_001"},
    {"name": "代理池02",
     "url": "
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值