搭建IP代理池 - ProxyPool

本文介绍了如何使用ProxyPool创建和运行一个IP代理池,该代理池支持通过Docker或常规Python环境配合Redis运行。ProxyPool能定时抓取免费代理,测试并保留可用代理,提供API供随机取用。用户可以通过Docker快速启动,或在本地安装Python和Redis环境后运行源代码。
摘要由CSDN通过智能技术生成

前言

在爬虫开发中,我们经常会碰到ip封禁,访问限制的问题,今天主要分享个我在开发中用到过比较好用的ip代理池,希望有需要的小伙伴提供到帮助~

简介

ProxyPool是一个简易高效的代理池,他可以在windows上搭配redis使用,也可以在Docker使用

提供如下功能:
1、定时抓取免费代理网站,简易可扩展。
2、使用 Redis 对代理进行存储并对代理可用性进行排序。
3、定时测试和筛选,剔除不可用代理,留下可用代理。
4、提供代理 API,随机取用测试通过的可用代理。

下载地址:https://github.com/Python3WebSpider/ProxyPool.git

运行方式

1、Docker

如果使用 Docker,则需要安装如下环境:
Docker
Docker-Compose
安装方法自行搜索即可。
官方 Docker Hub 镜像:germey/proxypool

Docker 运行
只需运行 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 即可获取一个随机可用代理。
当然你也可以选择自己 Build,直接运行如下命令即可:

docker-compose -f build.yaml up

如果下载速度特别慢,可以自行修改 Dockerfile,修改:

- RUN pip install -r requirements.txt
+ RUN pip install -r requirements.txt -i https://pypi.douban.com/simple

2、常规方式

常规方式要求有 Python 环境、Redis 环境,具体要求如下:
Python>=3.6
Redis

常规方式运行

本地安装 Redis、Docker 启动 Redis、远程 Redis 都是可以的,只要能正常连接使用即可。
首先可以需要看一下环境变量,代理池会通过环境变量读取这些值。
设置 Redis 的环境变量有两种方式,
一种是分别设置 host、port、password,
另一种是设置连接字符串,设置方法分别如下:
设置 host、port、password,如果 password 为空可以设置为空字符串,示例如下:

export PROXYPOOL_REDIS_HOST='localhost'
export PROXYPOOL_REDIS_PORT=6379
export PROXYPOOL_REDIS_PASSWORD=''
export PROXYPOOL_REDIS_DB=0

1、首先使用 git clone 将源代码拉到你本地, https://github.com/Python3WebSpider/ProxyPool.git
在这里插入图片描述

2.进入proxypool目录,修改settings.py文件,PASSWORD为Redis密码,如果为空,则设置为None。(新装的redis一般没有密码。)

3.接着在你 clone 下来的文件目录中(就是这个ProxyPool存的电脑路径 )安装相关所需的依赖包:
pip install -r requirements.txt
在这里插入图片描述
4.接下来开启你的 redis服务,直接cmd 打开dos窗口,运行:redis-server.exe
即可开启redis服务器。redis 的默认端口就是 6379
在这里插入图片描述
5.接着就可以运行 run.py 了。
运行之后会启动 Tester、Getter、Server,这时访问 http://localhost:5555/random 即可获取一个随机可用代理。
在这里插入图片描述
注意此处可以用两种方式运行代理池,一种是 Tester、Getter、Server 全部运行,另一种是按需分别运行。
或者如果你弄清楚了代理池的架构,可以按需分别运行,命令如下:

python3 run.py --processor getter
python3 run.py --processor tester
python3 run.py --processor server

6.运行 run.py 以后,你可以打开你的redis管理工具,或者进入redis里面查看,这时候在你的 redis 中就会存入很多已经爬取到的代理 ip 了
在这里插入图片描述
7.项目跑起来之后保持运行,此时redis里面存了ip,就可以访问这个代理池了。

在上面的图中,可以看到有这么一句话 Running on http://0.0.0.0:5555/ (Press CTRL+C to quit)
这就是告诉我们随机访问地址URL是多少了
你可以在浏览器中随机获取一个代理 ip 地址:http://0.0.0.0:5555/random
你就浏览器输入:
在这里插入图片描述

Python获取代码

import requests

PROXY_POOL_URL = "http://localhost:5555/random"
def get_proxy():
	try:
		response = requests.get(PROXY_POOL_URL)
		if response.status_code == 200:
			return response.text
	except ConnectionError:
		return None

if name == ‘main’:
	print(get_proxy())

正常请求如下图:
在这里插入图片描述
好了,自此你本地ip代理池就搭建好了,希望可以帮助到大家~

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值