壹 准备
当我们需要使用网上免费的代理池时,我们可以通过jhao104
师傅的proxy_pool进行搭建自己的代理池。
工具:proxy_pool-2.4.0.zip
大致的使用方法是:
- 下载必备的
ProxyPool
和Redis
工具 - 运行
Redis
,用于存储网上的代理IP
- 修改
Proxypool
配置文件 - 启动
ProxyPool
工具 - 直接使用
ProxyPool
的API
接口获取代理IP
贰 详细使用
2.1 下载ProxyPool
ProxyPool链接:ProxyPool
2.2 下载数据库Redis
Redis链接:Redis
在Releases里,下载压缩包:
2.3 运行Redis
安装服务:输入命令安装Redis:redis-server --service-install redis.windows.conf
然后选择Redis服务运行:
最后测试是否可以使用:
# 使用redis-cli.exe工具
# 把redis-cli.exe拷贝到要使用代理池的PC,然后在测试
redis-cli.exe -h 127.0.0.1 -p 6379
安装Redis是为了将ProxyPool工具获取的IP存放到数据库里,方便获取。
2.4 修改Proxypool配置文件
文件在前面下载的Proxypool/setting.py
,主要修改两处:
DB_CONN:Redis数据库位置,注意ip和端口,不需要加后缀
FROXY_FEYCHER:可用的代理ip地址,参考github上实时代理源有效信息
2.5 启动代理池服务
打开两个程序:
启动调度程序:python proxyPool.py schedule
启动webApi服务:python proxyPool.py server
2.6 最后就是使用了
这里需要注意的是代理池的IP
很容易挂掉,当使用proxies
参数进行代理时会非常容易出现代理用不了而出现本机IP
的情况。
import requests
# 通过proxyPool的API获取代理IP
def get_proxy():
#5000:settings中设置的监听端口,不是Redis服务的端口
return requests.get("http://127.0.0.1:5000/get/").json()
# 使用完后,为了防止重复使用IP,可以通过proxyPool的API删除代理IP
def delete_proxy(proxy):
requests.get("http://127.0.0.1:5000/delete/?proxy={}".format(proxy))
# 主代码
def getHtml():
# 尝试的次数
retry_count = 5
# 获取代理IP
proxy = get_proxy().get("proxy")
print(proxy)
while retry_count > 0:
try:
html = requests.get('http://www.baidu.com', proxies={"http": "http://{}".format(proxy)})
print(html.text)
break
except Exception:
retry_count -= 1
# 删除代理池中代理
delete_proxy(proxy)
getHtml()
叁 解决问题
Redis问题
1)先卸载服务: redis-server --service-uninstall 2)然后再安装: redis-server--service-install redis.windows.conf
Python问题
# ImportError: cannot import name 'Markup' from 'jinja2'
pip install jinja2==2.11.3
# ImportError: cannot import name 'soft_unicode' from 'markupsafe'
python -m pip install markupsafe==2.0.1
# ImportError: cannot import name 'json' from 'itsdangerous'
python -m pip install itsdangerous==2.0.1