作者热门文章
- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
项目地址: https://github.com/jhao104/proxy_pool 。
该项目是基于redis的,所以我们首先需要一个redis,这里我还是选择用docker快速启动一个 。
docker run -d --name redis -p 6380:6379 redis --requirepass yourpassword
docker run -d --name redis redis --requirepass yourpassword
如果你第一步中选择了映射,呢么就可以直接跳到0x03 启动项目 中直接运行了,如果不是,那么你就需要知道启动的实例的内网ip,但是当我们 docker exec 进去的时候会发现并没有相关的 ip addr 的环境,懒得安装了,直接在本机用如下命令 。
docker inspect redis
这里的redis是容器的name,在结果中找到如下所示即为容器内网ip(可与本机通信) 。
本机可以ping通 。
直接替换密码,ip以及响应的端口即可,选择映射出来的话再开放防火墙策略就可以通过公网ip访问了 。
docker run -d --env DB_CONN=redis://:yourpassword@172.17.0.2:6379/0 -p 5010:5010 jhao104/proxy_pool:latest
启动web服务后, 默认配置下会开启 http://127.0.0.1:5010 的api接口服务
api | method | Description | params |
---|---|---|---|
/ | GET | api介绍 | None |
/get | GET | 随机获取一个代理 | 可选参数: ?type=https 过滤支持https的代理 |
/pop | GET | 获取并删除一个代理 | 可选参数: ?type=https 过滤支持https的代理 |
/all | GET | 获取所有代理 | 可选参数: ?type=https 过滤支持https的代理 |
/count | GET | 查看代理数量 | None |
/delete | GET | 删除代理 | ?proxy=host:ip |
如果要在爬虫代码中使用的话, 可以将此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
剩下具体的可以去github看文档 。
后续的话可以使用docker-compose,然后编写yml文件等等操作来实现更“自动化” 。
最后此篇关于docker快速启动proxy_pool项目的文章就讲到这里了,如果你想了解更多关于docker快速启动proxy_pool项目的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我是一名优秀的程序员,十分优秀!