https://github.com/jhao104/proxy_pool

安装依赖

  1. python -m pip install -r requirements.txt

配置 Config/setting.py

  1. # Config/setting.py 为项目配置文件
  2. DB_TYPE = getenv(\'db_type\', \'REDIS\').upper()
  3. DB_HOST = getenv(\'db_host\', \'127.0.0.1\')
  4. DB_PORT = getenv(\'db_port\', 6379)
  5. DB_PASSWORD = getenv(\'db_password\', \'redis123\')
  6. """ 数据库配置 """
  7. DATABASES = {
  8. "default": {
  9. "TYPE": DB_TYPE,
  10. "HOST": DB_HOST,
  11. "PORT": DB_PORT,
  12. "NAME": "proxy",
  13. "PASSWORD": DB_PASSWORD
  14. }
  15. }
  16. # 上面配置启动后,代理池访问地址为 http://127.0.0.1:5010

启动

  1. # 如果你的依赖已经安装完成并且具备运行条件,可以在cli目录下通过ProxyPool.py启。动
  2. # 程序分为: schedule 调度程序 和 webserver Api服务
  3. # 首先启动调度程序
  4. >>>python proxyPool.py schedule
  5. # 然后启动webApi服务
  6. >>>python proxyPool.py webserver

Docker

  1. docker pull jhao104/proxy_pool
  2. # 远程数据库
  3. docker run --env db_type=REDIS --env db_host=x.x.x.x --env db_port=6379 --env db_password=pwd_str -p 5010:5010 jhao104/proxy_pool
  4. # 宿主机上的数据库
  5. docker run --env db_type=REDIS --env db_host=host.docker.internal --env db_port=6379 --env db_password=pwd_str -p 5010:5010 jhao104/proxy_pool

使用

  1. 启动过几分钟后就能看到抓取到的代理IP
api method Description arg
/ GET api介绍 None
/get GET 随机获取一个代理 None
/get_all GET 获取所有代理 None
/get_status GET 查看代理数量 None
/delete GET 删除代理

爬虫使用

如果要在爬虫代码中使用的话, 可以将此api封装成函数直接使用,例如:

  1. import requests
  2. def get_proxy():
  3. return requests.get("http://127.0.0.1:5010/get/").json()
  4. def delete_proxy(proxy):
  5. requests.get("http://127.0.0.1:5010/delete/?proxy={}".format(proxy))
  6. # your spider code
  7. def getHtml():
  8. # ....
  9. retry_count = 5
  10. proxy = get_proxy().get("proxy")
  11. while retry_count > 0:
  12. try:
  13. html = requests.get(\'http://www.example.com\', proxies={"http": "http://{}".format(proxy)})
  14. # 使用代理访问
  15. return html
  16. except Exception:
  17. retry_count -= 1
  18. # 出错5次, 删除代理池中代理
  19. delete_proxy(proxy)
  20. return None

使用示例

版权声明:本文为kai-原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/kai-/p/12659815.html