【代理池工具撰写】只有无尽的跳转,没有封禁的IP!

本文介绍了作者开发的第三代代理池,具有轮询变动IP、异步处理和适者生存的特点。代理池通过6个模块实现从爬取、存储、检测到接口调用的功能,使用Redis存储和Aiohttp进行异步检测,通过WEB API提供接口。文中详细讲解了各个模块的实现思路和代码细节。
摘要由CSDN通过智能技术生成
更多渗透技能 ,公众号:渗透师老A

作者:暗箭

脚本背景:

我刚开始写的第一代代理池 单纯为了练手,只具备批量爬取代理的功能。

后来我开始写第二代,批量爬取加检测代理否可用,将可用代理输出,不可用代理pass。

这是根据我自身需求写的,短短几十行代码清晰可辨。

很明显,这有很多不足。

如果请求的代理原本是一个可用代理,但因为首次请求出现意外,导致请求失败,那么一个明明可以为我们所用的代理,就这样被我们错过了。

不具备轮询变动的功能,不具备配合工具来回跳动ip的功能……

为了满足大家的需求,我开始参考网上大佬们的思路,潜心研究,通宵达旦,废寝忘食,夜以继日…………
ε=ε=ε=( ̄▽ ̄)经过几十次调试 终于写出了第三代【豪华版】代理池。

在这里插入图片描述

【第三代代理池优点】:

1.轮询变动IP
2.适者生存,不适者淘汰
3.异步处理,无需等待
4.sqlmap搭档神器,IP跳来跳去
5.无需配置数据库,WEB AIP轻松解决

好了,我不多BB,直接步入正题

实现代理池轮询变动-从第一个字母开始敲起

一.代理池的实现条件:

(1).我们需要安装几个python中的库,安装起来很简单,pip3 install “库名”。

以下是需要用到的库,其中包含系统自带库,大家可根据自身情况选择安装。(若缺少相应的模板,在脚本执行时会有报错提示的,可根据提示补充安装)

当然,有问题可以留言或私聊我

 Redis,redis-dump
 Pyquery
 urllib
 random
 asyncio
 aiohttp
 botocore
 multiprocessing

(2).安装Redis-x64-3.0.504.msi,若不安装则脚本运行时会报错:Error 10061 connecting to 127.0.0.1:6379. 由于目标计算机积极拒绝,无法连接
报错原因:Redis服务没有启动
安装教程:github下载,下载速度极慢,需要搭梯子。考虑到本篇文章不能涉及翻墙,所以我将我搭梯子下载好的Redis-x64-3.0.504.msi放到下方的附件中,供大家安装。

在这里插入图片描述

二.代理思路

(1).模块创建

本次代理池全面升级,为了实现功能的多样性,以及保证脚本的稳定性,可读性。

我将创建6个模块脚本,实现从代理池运行——》爬取代理——》存储——》检测——》接口——》调用等功能。

(2).实现代理维护

使用代理赋值法,将批量获取的免费代理统一赋初始值为10,并存入数据库中,通过检测模块向代理服务器发送请求,若首次请求成功,则将该代理初始值提升至100,若首次请求失败则将初始值减1,若代理值减为0,则将代理从代理池中移除。

(3.)代理调用

通过WEB API接口,拿到随机可用代理,根据我们为代理赋加的值,优先获取最高值代理(值越高越稳定),若无最高值代理,则根据值的大小进行排名,优先输出排名最靠前的代理,供我们使用。

三.代理编写

说实话……我真不能一点一点告诉你们每句代码的意思,因为代码太多了,所以保姆式教程在本篇文章中就不适用了。还望大家理解,但我一定能保证大家看得懂本篇文章,并且在看完本篇文章后,能够获得如何编写自己代理池的思路。

小白同学就要受点委屈了~不过我相信本篇文章对小白的提升一定是巨大的!!!

存储模块编写:

(1).将爬取的代理存储到Redis数据库中,通过定义一个类来操作Redis的有序集合。

(2).我们前面说过要为代理赋初始值,并且根据赋值大小进行排序,所以我们不得不调用Redis有序集合来满足我们的要求。

什么是Redis有序集合:

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。

redis正是通过分数来为集合中的成员进行从小到大的排序。

这里的double类型分数就是我们为代理赋的值。

现在我们要定义一个类,一些方法 和一些常量来实现代理的存储。

创建db.py为存储模块: 下面内容需要我们对Redis库的函数有所了解,要不然是看不懂的。

python

coding=gbk

存储模块

首先来定义一些常量:

python
MAX_SCORE = 100 #最大值
MIN_SCORE = 0 #最小值
INITIAL_SCORE = 10 #初始值
REDIS_HOST = 'localhost' #Redis连接IP
REDIS_PORT = 6379 #Redis连接端口
REDIS_PASSWORD = None #连接密码,大家根据自己需求选择
REDIS_KEY = 'proxies' #有序集合键名,获取代理存储使用的有序集合

调用库并创建类和方法:

python
import redis #实现Redis的连接及使用
from random import choice #返回一个列表,元组或字符串的随机项

class RedisClient(object):
 def __init__(self, host=REDIS_HOST, port=REDIS_PORT, password=REDIS_PASSWORD):
 """
 初始化
 :p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值