Python爬虫彩蛋:构建工程化代理IP池
作者:Barranzi_
个人github主页:[github](https://github.com/La0bALanG)
个人邮箱:awc19930818@outlook.com
新时代的铁饭碗:一辈子不管走到哪里都有饭吃(还能吃上热乎的)。——佚名
免责声明:
本系列笔记撰写初衷就是为了分享个人知识以及个人学习历程中的感悟及思考,所涉及到的内容`仅供学习与交流`,请勿用作`非法或商业用途`!由此引发的任何法律纠纷`后果自负`,与作者本人无关!
版权声明:
未经作者本人授权,禁止转载!请尊重原创!

注:本文所有代码、案例测试环境:1.Linux -- 系统版本:Ubuntu20.04 LTS 2.windows -- 系统版本:WIN10 64位家庭版
构建工程前准备
-
redis注册开机自启服务
注意:需要进入redis所在安装目录执行cmd命令;
redis-server --service-install redis.windows.conf --loglevel verbose随后在windows管理 – 服务和应用程序 中即可找到添加的redis服务。
当然,我们最好将redis目录配置到系统path,这样无需每次进入redis目录即可连接redis客户端。
-
确保redis服务为开启状态:
进入管理 – 服务和应用程序 查看redis服务状态,未开启则可以手动开启;
-
连接redis客户端:
redis-cli.exe -
查看设置的redis连接密码:
config get requirepass -
设置密码:
auth [your password]注意:如果未在redis.windows.conf中配置密码,则在这里每次配置的密码为临时登录密码,跟随系统内存关闭时密码自动失效。
为何每次要设置密码:因为在proxyPool的配置文件settings.py内设置的redis连接中设置了密码,所以项目每次连接redis数据库时都需要密码。
此步为了省事,大家可以无需在settings.py中配置redis连接密码即可。
-
运行proxyPool项目
-
开启第一个终端,进入proxyPool工程目录,执行cmd,运行:
python proxyPool.py schedule -
开启第二个终端,进入proxyPool工程目录,执行cmd,运行:
python proxyPool.py server
至此,即开启了proxyPool API 服务。
-
构建代理IP池模块化工程
顾名思义,在这里我们的需求是:创建自定义模块,并将其发布至本机python环境目录。
-
创建模块文件目录结构
-
创建一个空目录ProxyPool,其内部创建模块程序文件proxyPool.py;同时创建
-
“init.py”文件
-
在该目录同级目录下创建setup.py,并初始化内容如下:
from distutils.core import setup setup(name='ProxyPool',version='1.0',author='Barranzi',py_modules=['ProxyPool.proxyPool'])
-
-
模块程序文件内的编码:实现核心模块功能。代码如下:
# -*- coding:utf-8 _*- """ @version: author:weichao_an @time: 2020/10/12 @file: proxyPool.py @environment:virtualenv @email:awc19930818@outlook.com @github:https://github.com/La0bALanG @requirement:构建个人IP代理池,工程化应用 """ import requests import json def getAPIInfo(): ''' get proxy pool API information return:str ''' return requests.get('http://127.0.0.1:5010/').text def getProxy(): ''' get one proxy from proxyPool return:dict ''' return json.loads(requests.get('http://127.0.0.1:5010/get').text) def getProxyCounts(): ''' get all proxys,means get how many proxys in proxyPool return:str ''' return requests.get('http://127.0.0.1:5010/get_status').text def getAllProxy(): ''' get all proxys return:list data,every elements is dict ''' return json.loads(requests.get('http://127.0.0.1:5010/get_all').text) def delete_proxy(proxy): ''' from proxyPool delete one of a proxy return:<class 'requests.models.Response'> ''' return requests.get('http://127.0.0.1:5010/delete/?proxy={}'.format(proxy)) -
创建模块:
python setup.py build -
生成发布的压缩包:
python setup.py sdist -
得到生成的tar包后,解压,进入其目录,将其安装至本机python环境:
python setup.py install
至此,所得模块工程目录结构如下:

代理IP池模块使用
因为我们已经将其发布至本地的python环境,所以可以像正常导包一样使用。
demo:
from ProxyPool.proxyPool import getProxy,getAPIInfo,getProxyCounts,getAllProxy
get_p = getProxy()['proxy']
print(get_p)
over.
码字不易,且看且珍惜。


