IP代理池
IP代理作为反反爬的一个有效途径,面对一些基础的反爬网站,学会使用IP代理非常有必要
目前我使用来着GitHub上一个开源项目抓取公开IP的项目构建IP池子,再次感谢开源博主,下面进行介绍
Clone项目
Clone项目git clone git@github.com:jhao104/proxy_pool.git确认安装Redis并开启服务
Redis并开启服务Redis是一个用于存储键值对的简单数据库,可以从GitHub下载,也可以上官网,安装完成后,运行redis-cli.exe,如显示127.0.0.1:6379>,说明安装成功,并在指定端口开启服务,进一步可以配置密码,具体教程
redis-cli.exe -h 127.0.0.1 -p 6379
config set requirepass 123456 # 设置密码为123456进行项目配置
配置
redis数据库密码DB_CONN = 'redis://:pwd@127.0.0.1:8888/0' # pwd改为自己的密码123456
启动IP抓取
python proxyPool.py schedule # 运行后开始抓取IP并存入数据库调用IP池
python proxyPool.py server # 启动API服务接口,端口为http://127.0.0.1:5010具体调用规则包括
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服务)
# 从数据库调用IP
def get_proxy():
return requests.get("http://127.0.0.1:5010/get/").json()
# 删除数据库中IP
def delete_proxy(proxy):
requests.get("http://127.0.0.1:5010/delete/?proxy={}".format(proxy))
# 使用代理IP发起请求
def getResponse(URL, header):
retry_count = 5
proxy = get_proxy().get("proxy")
while retry_count > 0:
try:
response = requests.get(URL, headers=header, timeout=60, proxies={"http": "http://{}".format(proxy)})
# 使用代理访问
return response
except Exception:
retry_count -= 1
# 删除代理池中代理
delete_proxy(proxy)
return None最后更新于