前言
通过Github上的项目:https://github.com/jhao104/proxy_pool
- 在该项目中,通过爬虫定时抓取网上的免费代理IP,入库并定时检测有效性,然后用flask+gunicorn挂起一个服务,提供接口去拿到经检测有效可用的代理IP
- 作者还额外提供了docker镜像,们只需提供redis地址即可一键部署proxy_poool
- 还有更简单的方式,更傻瓜式的一键部署,利用docker-compose整合proxy_pool和redis,除去配置redis的繁琐,实现更方便的一键部署(https://www.bilibili.com/read/cv12056474)
部署流程:
-
在腾讯云中输入
git clone https://gitee.com/nbody1996/free_proxy_redis.git
-
进入目录
cd free_proxy_redis
-
修改配置文件
vim docker-compose.yml
-
以守护进程模式运行docker
docker-compose up -d
注:要执行该命令应首先安装docker-compose,否则会出现以下错误
可以通过sudo apt install docker-compose
进行安装
Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速在集群中部署分布式应用 -
查看docker的具体输出
docker-compose logs -f
使用
浏览器打开http://127.0.0.1:5010/get/ 即可返回一个可用代理
api参考:
爬虫使用
如果要在爬虫代码中使用的话, 可以将此api封装成函数直接使用,例如:
import requests
def get_proxy():
return requests.get("http://127.0.0.1:5010/get/").json()
def delete_proxy(proxy):
requests.get("http://127.0.0.1:5010/delete/?proxy={}".format(proxy))
# your spider code
def getHtml():
# ....
retry_count = 5
proxy = get_proxy().get("proxy")
while retry_count > 0:
try:
html = requests.get('http://www.example.com', proxies={"http": "http://{}".format(proxy)})
# 使用代理访问
return html
except Exception:
retry_count -= 1
# 删除代理池中代理
delete_proxy(proxy)
return None
参考网址:
https://www.bilibili.com/read/cv12056474
https://github.com/jhao104/proxy_pool