前言
可以参考另一篇文章,一个更高效的代理池程序,本文仅作存档
因为某个还处于脑海中的项目需要一个代理池,所以从GitHub上找了一个,记录一下部署的过程。
开源项目地址:链接
安装过程
-
创建虚拟环境
亲测使用较新的依赖库会有小问题,而且此项目的requirements.txt
里所有的依赖版本都是写死的,所以最好创建一个虚拟环境。
安装virtualenv
pip3 install virtualenv
创建纯净的虚拟环境
virtualenv --no-site-packages [环境名称]
激活虚拟环境
cd [环境名称] source ./bin/activate
当看到命令提示符前缀改变了,就说明虚拟环境切换成功了。
-
克隆仓库
git clone https://github.com/jhao104/proxy_pool
-
安装依赖
cd proxy_pool pip3 install -r requirements.txt
-
配置数据库、访问端口
配置文件路径proxy_pool/Config/setting.py
#第36行 DB_TYPE = getenv('db_type', 'REDIS').upper() #可以是'SSDB'或者'REDIS' DB_HOST = getenv('db_host', '127.0.0.1') #数据库IP DB_PORT = getenv('db_port', '6379') #数据库端口 DB_PASSWORD = getenv('db_password', '')
#第68行 SERVER_API = { "HOST": "127.0.0.1", #代理池绑定的IP,为了安全起见,只允许本地访问 "PORT": 5010 #代理池绑定的端口 }
-
修改启动脚本
文件路径proxy_pool/cli/start.sh
替换原有内容:#!/usr/bin/env bash source ~/venv/bin/activate python3.6 proxyPool.py webserver & python3.6 proxyPool.py schedule
-
自定义API【可选】
文件路径proxy_pool/Api/ProxyApi.py
第50-85行,可以根据需要修改API,我删掉了delete
、'refresh'这两个API@app.route('/') def index(): return api_list # @app.route('/get/') def get(): proxy = ProxyManager().get() return proxy.info_json if proxy else {"code": 0, "src": "no proxy"} # @app.route('/refresh/') def refresh(): # TODO refresh会有守护程序定时执行,由api直接调用性能较差,暂不使用 # ProxyManager().refresh() pass return 'success' # @app.route('/get_all/') def getAll(): proxies = ProxyManager().getAll() return [_.info_dict for _ in proxies] # @app.route('/delete/', methods=['GET']) def delete(): proxy = request.args.get('proxy') ProxyManager().delete(proxy) return {"code": 0, "src": "success"} # @app.route('/get_status/') def getStatus(): status = ProxyManager().getNumber() return status
添加获取纯代理API
@app.route('/get_raw/') def getRaw(): proxy = ProxyManager().get() return proxy.proxy if proxy else {"code": 0, "src": "no proxy"} # @app.route('/get_all_raw/') def getAllRaw(): proxies = ProxyManager().getAll() return '\n'.join([_.proxy for _ in proxies]) if proxies else {"code": 0, "src": "no proxy"}
添加错误页处理
@app.errorhandler(404) @app.errorhandler(403) @app.errorhandler(502) @app.errorhandler(500) def error_page(e): return api_list #出错显示API信息,也可以使用redirect重定向。
运行
建议使用screen开一个虚拟终端运行
screen -S proxy_pool
启动服务
./start.sh
使用
API地址 | 方法 | 说明 | 参数 |
---|---|---|---|
/ | GET | api介绍 | - |
/get | GET | 随机获取一个代理 | - |
/get_raw | GET | 随机获取一个代理,去除无关信息 | - |
/get_all | GET | 获取所有代理 | - |
/get_all_raw | GET | 获取所有代理,去除无关信息 | - |
/get_status | GET | 查看代理数量 | - |
/delete | GET | 删除代理 | proxy=host:ip |
例如,想获取服务器状态就可以访问
http://127.0.0.1:5010/get_status/
Nginx反代【可选】
添加到server{}
里面
location /
{
proxy_pass http://127.0.0.1:5010/;
proxy_set_header Host $host;
}
安全性
- 另外创建一个用户来运行该服务,
- 将整个虚拟环境以及
proxy_pool
放进该用户的home
目录,修改属主,并设置权限为700 - 使用
su - [用户名]
切换用户名,然后使用该用户运行代理池程序
本文链接:https://blog.chrxw.com/archives/2019/11/12/660.html
转载请保留本文链接,谢谢