# Proxy_pool **Repository Path**: Wiliam01/Proxy_pool ## Basic Information - **Project Name**: Proxy_pool - **Description**: 一个快速上手维护你的付费代理ip,采用AES对称加密保护你的代理安全,防止信息泄露被滥用 - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 15 - **Forks**: 1 - **Created**: 2020-02-19 - **Last Updated**: 2023-08-16 ## Categories & Tags **Categories**: networklib **Tags**: None ## README 爬虫IP代理池 ======= [![](https://img.shields.io/badge/Language-Python-brightgreen)](http://sunsunsir.cn) [![](https://img.shields.io/badge/DateBase-Redis-red)](http://sunsunsir.cn) [![](https://img.shields.io/badge/Desc-Proxy-yellow)](http://sunsunsir.cn) ### 下载安装 * 下载源码: ```shell git clone https://gitee.com/Wiliam01/Proxy_pool.git 或者直接 https://gitee.com/Wiliam01/Proxy_pool/repository/archive/master.zip 下载zip文件 ``` * 安装依赖: ```shell pip install -r requirements.txt 注意事项:因为使用了AES对称加密,所以要安装加密模块,这个没有写在 requirements.txt文件中: 在 Windows下使用AES时要安装的是pycryptodome 模块 pip install pycryptodome 在 Linux下使用AES时要安装的是pycrypto模块 pip install pycrypto ``` * 配置Config/setting.py: ```python # Config/setting.py 为项目配置文件 # 配置数据库 DB_TYPE = os.getenv('db_type', 'REDIS') DB_HOST = os.getenv('db_host', '127.0.0.1') DB_PORT = os.getenv('db_port', 6379) DB_PASSWORD = os.getenv('db_password', '') PROXY_NAME = "Proxy" #redis 里边的存储名字 Pool = redis.ConnectionPool(host=DB_HOST, port=6379, password=DB_PASSWORD, max_connections=20) # 配置 代理ip抓取方法 PROXY_GETTER = [ "zhandaye", # 这里是启用的代理抓取函数名,可在IP/get_ip_proxy.py 扩展 ] # 配置 API服务 SERVER_API = { "HOST": "0.0.0.0",#地址 "PORT": 6010, #端口 "token":"123456." #用于web访问,当作token参数使用 } # 上面配置启动后,代理池访问地址为 http://127.0.0.1:6010 #加密算法key配置 KEY_STR = "123456." #key IV_B = "123456." #偏移量 #加密解密文件 Encryption/python_aes.py '''python e = aes.encrypt("hello world") # 加密 d = aes.decrypt(e) # 解密 print("加密:", e) print("解密:", d) ''' ``` * 启动: ```shell >>>python run.py #linux 后台运行 nohup python run.py ``` ### 使用 过一会你就能看到代理ip存储到PROXY_NAME 名字中   也可以通过api访问http://127.0.0.1:6010 查看。 * Api 公共参数: token 访问接口的密码,在配置文件中设置 | api | method | Description | arg| | ----| ---- | ---- | ----| | / | GET | api介绍 | None | | /get | GET | 随机获取一个代理 | 参数:num 获取代理的数量,不超过100| | /all | GET | 获取所有代理 |为了减小数据量,返回1000,并返回总数| | /del | GET | 删除代理 |参数:proxy_str,获取到ip列表得到| * 爬虫使用   如果要在爬虫代码中使用的话, 可以将此api封装成函数直接使用,例如: ```python import requests def get_proxy(): #获取到的认证代理密码一定要解密 return requests.get("http://127.0.0.1:6010/get?token={}&num=1").json() def delete_proxy(proxy): requests.get("http://127.0.0.1:5010/delete/?proxy={}".format(proxy)) ``` ### 扩展代理   项目本身添加了站大爷的函数方法,添加了其他的函数方法,需要在Setting文件 PROXY_GETTER变量中添加函数名即可,这样才能在run.py文件中被调度 ```python class Get_ip_proxy_: def __init__(self): self.proxy_json = { "proxy_ip": "", "type":1, "user":"", "password":"", "last_status": 1, "last_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S") } def zhandaye(self): while True: time.sleep(13) # 最快请求频率不得超过10s一次 # 以下是购买站大爷提供的信息 url = "" api_id = "" api_psw = aes.encrypt("").decode('utf-8') try: response = requests.get(url,timeout=3) data = json.loads(response.text) logger.info(data) if data["msg"] == "获取成功": ip_list = data["data"]["proxy_list"] for x in ip_list: ip = x["ip"] port = x["port"] self.proxy_json.update({"proxy_ip":ip+":"+str(port),"user":api_id,"password":api_psw}) Redis_cliient.put(self.proxy_json) except: fp = StringIO() traceback.print_exc(file=fp) message = fp.getvalue() logger.error(message) ``` * 2、添加好方法后,修改Config/Setting.py文件中的`PROXY_GETTER`项:   在`PROXY_GETTER`下添加自定义的方法的名字: ```python PROXY_GETTER = [ "zhandaye", ] ``` 注意:自定义的扩展,一定要准守一下的准则才能被通用,否则会导致相对应的函数调度线程异常退出,每个函数方法需要使用while True:和time.sleep()保持方法可以一直运行下去,后期会优化为定时调度的方式。 存储代理ip请按照如下格式存储: ```python proxy_json = { "proxy_ip": "", #代理ip:port "type":1, #代理类型,暂时区分是否用户认证,1为用户认证,2为非用户认证 "user":"", #用户认证用户名 "password":"", #用户认证密码 "last_status": 1, #最后一次验证的状态,1可用,0不可用,其实这个字段作为保留,不可用时就删除了 "last_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S") } ``` ### 代理采集 目前实现的付费代理商采集(以下测试是本人亲测,和任何代理商无任何关系。) | 厂商名称 | 类型 | 可用率 | 地址 | ip池数量 | | ----- | ---- | ------ | --------- | --------- | | 站大爷 | 短效3-6分钟 | 较好 | [地址](https://www.zdaye.com/) | 日ip 20-40万左右 | | | 小象代理 | 短效1-3分钟 | 较好 | [地址](https://www.xiaoxiangdaili.com/) | 日ip 不超过20万 | | ### 问题反馈 因为开发时间只用了一天,所以可能会出现许多问题,请见谅!   任何问题欢迎在[Issues](https://gitee.com/Wiliam01/Proxy_pool/issues) 中反馈   你的反馈会让此项目变得更加完美。 ### 贡献代码   [@William](https://gitee.com/Wiliam01) ### 参考 https://github.com/jhao104/proxy_pool