# ProxyPool
![build](https://github.com/Python3WebSpider/ProxyPool/workflows/build/badge.svg)
![deploy](https://github.com/Python3WebSpider/ProxyPool/workflows/deploy/badge.svg)
![](https://img.shields.io/badge/python-3.6%2B-brightgreen)
![Docker Pulls](https://img.shields.io/docker/pulls/germey/proxypool)
简易高效的代理池,提供如下功能:
* 定时抓取免费代理网站,简易可扩展。
* 使用 Redis 对代理进行存储并对代理可用性进行排序。
* 定时测试和筛选,剔除不可用代理,留下可用代理。
* 提供代理 API,随机取用测试通过的可用代理。
代理池原理解析可见「[如何搭建一个高效的代理池](https://cuiqingcai.com/7048.html)」,建议使用之前阅读。
## 使用准备
首先当然是克隆代码并进入 ProxyPool 文件夹:
```
git clone https://github.com/Python3WebSpider/ProxyPool.git
cd ProxyPool
```
然后选用下面 Docker 和常规方式任意一个执行即可。
## 使用要求
可以通过两种方式来运行代理池,一种方式是使用 Docker(推荐),另一种方式是常规方式运行,要求如下:
### Docker
如果使用 Docker,则需要安装如下环境:
* Docker
* Docker-Compose
安装方法自行搜索即可。
### 常规方式
常规方式要求有 Python 环境、Redis 环境,具体要求如下:
* Python>=3.6
* Redis
## Docker 运行
如果安装好了 Docker 和 Docker-Compose,只需要一条命令即可运行。
```shell script
docker-compose up
```
运行结果类似如下:
```
redis | 1:M 19 Feb 2020 17:09:43.940 * DB loaded from disk: 0.000 seconds
redis | 1:M 19 Feb 2020 17:09:43.940 * Ready to accept connections
proxypool | 2020-02-19 17:09:44,200 CRIT Supervisor is running as root. Privileges were not dropped because no user is specified in the config file. If you intend to run as root, you can set user=root in the config file to avoid this message.
proxypool | 2020-02-19 17:09:44,203 INFO supervisord started with pid 1
proxypool | 2020-02-19 17:09:45,209 INFO spawned: 'getter' with pid 10
proxypool | 2020-02-19 17:09:45,212 INFO spawned: 'server' with pid 11
proxypool | 2020-02-19 17:09:45,216 INFO spawned: 'tester' with pid 12
proxypool | 2020-02-19 17:09:46,596 INFO success: getter entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
proxypool | 2020-02-19 17:09:46,596 INFO success: server entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
proxypool | 2020-02-19 17:09:46,596 INFO success: tester entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
```
可以看到 Redis、Getter、Server、Tester 都已经启动成功。
这时候访问 [http://localhost:5555/random](http://localhost:5555/random) 即可获取一个随机可用代理。
如果下载速度特别慢,可以自行修改 Dockerfile,修改:
```diff
- RUN pip install -r requirements.txt
+ RUN pip install -r requirements.txt -i https://pypi.douban.com/simple
```
## 常规方式运行
如果不使用 Docker 运行,配置好 Python、Redis 环境之后也可运行,步骤如下。
### 安装和配置 Redis
本地安装 Redis、Docker 启动 Redis、远程 Redis 都是可以的,只要能正常连接使用即可。
首先可以需要一下环境变量,代理池会通过环境变量读取这些值。
设置 Redis 的环境变量有两种方式,一种是分别设置 host、port、password,另一种是设置连接字符串,设置方法分别如下:
设置 host、port、password,如果 password 为空可以设置为空字符串,示例如下:
```shell script
export REDIS_HOST='localhost'
export REDIS_PORT=6379
export REDIS_PASSWORD=''
export REDIS_DB=0
```
或者只设置连接字符串:
```shell script
export REDIS_CONNECTION_STRING='redis://[password]@host:port/db'
```
如果没有密码也要设置为:
```shell script
export REDIS_CONNECTION_STRING='redis://@host:port/db'
```
这里连接字符串的格式需要符合 `redis://[password]@host:port/db` 的格式,注意不要遗漏 `@`。
以上两种设置任选其一即可。
### 安装依赖包
这里强烈推荐使用 [Conda](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#creating-an-environment-with-commands)
或 [virtualenv](https://virtualenv.pypa.io/en/latest/user_guide.html) 创建虚拟环境,Python 版本不低于 3.6。
然后 pip 安装依赖即可:
```shell script
pip3 install -r requirements.txt
```
### 运行代理池
两种方式运行代理池,一种是 Tester、Getter、Server 全部运行,另一种是按需分别运行。
一般来说可以选择全部运行,命令如下:
```shell script
python3 run.py
```
运行之后会启动 Tester、Getter、Server,这时访问 [http://localhost:5555/random](http://localhost:5555/random) 即可获取一个随机可用代理。
或者如果你弄清楚了代理池的架构,可以按需分别运行,命令如下:
```shell script
python3 run.py --processor getter
python3 run.py --processor tester
python3 run.py --processor server
```
这里 processor 可以指定运行 Tester、Getter 还是 Server。
## 使用
成功运行之后可以通过 [http://localhost:5555/random](http://localhost:5555/random) 获取一个随机可用代理。
可以用程序对接实现,下面的示例展示了获取代理并爬取网页的过程:
```python
import requests
proxypool_url = 'http://127.0.0.1:5555/random'
target_url = 'http://httpbin.org/get'
def get_random_proxy():
"""
get random proxy from proxypool
:return: proxy
"""
return requests.get(proxypool_url).text.strip()
def crawl(url, proxy):
"""
use proxy to crawl page
:param url: page url
:param proxy: proxy, such as 8.8.8.8:8888
:return: html
"""
proxies = {'http': 'http://' + proxy}
return requests.get(url, proxies=proxies).text
def main():
"""
main method, entry point
:return: none
"""
proxy = get_random_proxy()
print('get random proxy', proxy)
html = crawl(target_url, proxy)
print(html)
if __name__ == '__main__':
main()
```
运行结果如下:
```
get random proxy 116.196.115.209:8080
{
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.22.0",
"X-Amzn-Trace-Id": "Root=1-5e4d7140-662d9053c0a2e513c7278364"
},
"origin": "116.196.115.209",
"url": "https://httpbin.org/get"
}
```
可以看到成功获取了代理,并请求 httpbin.org 验证了代理的可用性。
## 可配置项
代理池可以通过设置环境变量来配置一些参数。
### 开关
* ENABLE_TESTER:允许 Tester 启动,默认 true
* ENABLE_GETTER:允许 Getter 启动,默认 true
* ENABLE_SERVER:运行 Server 启动,默认 true
### 环境
* APP_ENV:运行环境,可以设置 dev、test、prod,即开发、测试、生产环境,默认 dev
* APP_DEBUG:调试模式,可以设置 true 或 false,默认 true
### Redis 连接
* REDIS_HOST:Redis 的 Host
* REDIS_PORT:Redis 的端口
* REDIS_PASSWORD:Redis 的密码
* REDIS_DB:Redis 的数据库索引,如 0、1
* REDIS_CONNECTION_STRING:Redis 连接字符串
* REDIS_KEY:Redis 储存代理使用字典的名称
### 处理器
* CYCLE_TESTER:Tester 运行周期,即间隔多久运行一次测试,默认 20 秒
* CYCLE_GETTER:Getter 运行周期,即间隔多久运行一次代理获取,默认 100 秒
* TEST_URL:测试 URL,默认百度
* TEST_TIMEOUT:测试超时时间,默认 10 秒
* TEST_BATCH:批量测试数量,默认 20 个代理
* TEST_VALID_STATUS:测试有效的状态吗
* API_HOST:代理 Server 运行 Host,默认 0.0.0.0
* API_PORT:代理 Server 运行端口,默认 5555
* API_THREADED:代理 Server 是否使用多线程,默认
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
学习时的学习资料python基础数据库和js (303个子文件)
NavicatReact.bat 483B
redis.windows-service.conf 43KB
redis.windows.conf 43KB
power.conf 7KB
supervisord.conf 630B
url.conf 74B
dns.conf 67B
index.b0ddf5b5.css 77KB
custom.css 678B
data.csv 19KB
Dockerfile 342B
.dockerignore 2KB
面向高校校园的物物交换系统.docx 4.51MB
“易康”健康管理小程序设计与开发(1).docx 3.94MB
“易康”健康管理小程序设计与开发.docx 3.9MB
“易康”健康管理小程序设计与开发(修复2文档).docx 1001KB
sql进阶(1).docx 272KB
MySQL基础-实验手册.docx 171KB
sql基础练习2(1).docx 99KB
正则表达式实验手册.docx 37KB
Python模块的使用和面向对象 实验手册.docx 36KB
0306191216_莫丽丽_天津职业技术师范大学毕业设计(论文)答辩记录.docx 29KB
0306191303_崔贺淇_天津职业技术师范大学毕业设计(论文)答辩记录.docx 29KB
0306191302_陈梓涛_天津职业技术师范大学毕业设计(论文)答辩记录.docx 29KB
0306191416_王雅婷_天津职业技术师范大学毕业设计(论文)答辩记录.docx 25KB
0306191531_朱鑫_天津职业技术师范大学毕业设计(论文)答辩记录.docx 25KB
0306191407_姜艳_天津职业技术师范大学毕业设计(论文)答辩记录.docx 25KB
0306191422_曾智霞_天津职业技术师范大学毕业设计(论文)答辩记录.docx 25KB
0306191307_韩璐莹_天津职业技术师范大学毕业设计(论文)答辩记录.docx 25KB
0306191513_马梦哲_天津职业技术师范大学毕业设计(论文)答辩记录.docx 25KB
0306191516_任龙华_天津职业技术师范大学毕业设计(论文)答辩记录.docx 25KB
0306191308_侯俊蓥_天津职业技术师范大学毕业设计(论文)答辩记录.docx 25KB
0306191521_陶淼_天津职业技术师范大学毕业设计(论文)答辩记录.docx 25KB
0306191313_马文媛_天津职业技术师范大学毕业设计(论文)答辩记录.docx 25KB
0306191415_王新鹏_天津职业技术师范大学毕业设计(论文)答辩记录.docx 25KB
0306191423_张福华_天津职业技术师范大学毕业设计(论文)答辩记录.docx 25KB
0306191508_李扬_天津职业技术师范大学毕业设计(论文)答辩记录.docx 25KB
0306191410_刘阳_天津职业技术师范大学毕业设计(论文)答辩记录.docx 25KB
0306191319_魏紫璇_天津职业技术师范大学毕业设计(论文)答辩记录.docx 25KB
0306191502_高子洋_天津职业技术师范大学毕业设计(论文)答辩记录.docx 25KB
0306191408_雷燕晨_天津职业技术师范大学毕业设计(论文)答辩记录.docx 25KB
文件操作,序列化-实验手册.docx 20KB
多线程和多进程-实验手册.docx 17KB
Redis%20on%20Windows.docx 16KB
Windows%20Service%20Documentation.docx 14KB
考试题.docx 14KB
个人鉴定.docx 13KB
Redis%20on%20Windows%20Release%20Notes.docx 12KB
navicat161_premium_cs_x64.exe 92.37MB
redis-desktop-manager-0.8.8.384.exe 27.18MB
redis-server.exe 1.49MB
redis-cli.exe 479KB
redis-benchmark.exe 405KB
redis-check-dump.exe 270KB
redis-check-aof.exe 259KB
.gitignore 2KB
.gitignore 353B
.gitignore 184B
.gitignore 37B
.gitignore 14B
各种加密解密介绍.html 85KB
sql基础练习1(1).html 21KB
index.html 380B
favicon.ico 4KB
ProxyPool-master.iml 612B
2024-07.iml 452B
active-agt.jar 47KB
power.jar 11KB
hideme.jar 7KB
dns.jar 5KB
url.jar 4KB
question1.js 555KB
index.js 162KB
Proxy2.js 6KB
contentScript.js 3KB
background.js 98B
manifest.json 854B
idea.key 7KB
phpstorm.key 5KB
pycharm.key 5KB
goland.key 5KB
clion.key 5KB
webstorm.key 5KB
rider.key 5KB
datagrip.key 5KB
dataspell.key 5KB
LICENSE 1KB
73Selenium+phantomjs绕过接口加密.md 217KB
34测试软件应用进阶.md 43KB
1js条件语句与数据类型.md 27KB
如何给global加代理及必要性.md 26KB
多线程和多进程.md 12KB
README.md 11KB
4js属性相关方法.md 8KB
9对象的继承.md 8KB
5js array对象.md 7KB
DrissionPage终极神器.md 6KB
34pyppteer 换隧道代理.md 6KB
7实例对象与new命令.md 4KB
8 this关键字.md 4KB
共 303 条
- 1
- 2
- 3
- 4
资源评论
loner.y
- 粉丝: 153
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功