ProxiesPool IP代理池
MongoDB和flask实现的一个IP代理池
源代码地址,直接下载既可以使用,已包含依赖包
https://github.com/FelixZFB/ProxiesPool
基本思路:
- 获取代理IP: 爬取网站的免费代理。比如西刺、快代理之类有免费代理的网站, 但是这些免费代理大多数情况下都是不好用的,所以比较靠谱的方法是购买付费代理。当然,如果你有更好的代理接口也可以自己接入。
- 检测IP代理可用性: 因为免费代理大部分是不可用的,所以采集回来的代理IP不能直接使用,可以写检测程序不断的去用这些代理访问一个稳定的网站,看是否可以正常使用。
- 存储代理IP: 存储的代理IP首先要保证代理不重复 , 要检测代理的可用情况,还要动态实时处理每个代理,本文利用来MongoDB存储,当然也可用其他方式存储。
- 使用代理:最简单的办法就是用 API 来提供对外服务的接口 。
实现逻辑:
- 1.爬取免费代理IP网站(西刺代理,快代理,66代理等)的高匿代理
- 2.检测出有效的高匿代理,存储到MongoDB数据库中
- 3.定时检测MongoDB数据库已有IP代理是否有效,进行更新删除
- 4.使用flask的api接口调用IP代理池中的IP代理
IP代理池启动方式:
- 1.启动本地MongoDB数据库
- 2.运行main.py
- 3.外部api调用
外部调用方式:
参考api_demo.py
import requests
PROXY_POOL_URL = 'http://127.0.0.1:5000/one' # one proxy
PROXIES_POOL_URL = 'http://127.0.0.1:5000/all' # all proxies
下面方几个主要代码,完整代码查看源码
main.py 主程序(调度器)
from multiprocessing import Process
from Crawler.check_crawl_ip import CheckIp, CrawlIp
from api import run
def proxy_run():
# 数据库中ip检测进程
check_process = Process(target=CheckIp().check)
# 爬取ip代理的进程
crawl_process = Process(target=CrawlIp().crawl)
# api接口进程,用于从数据库中取出一个或者全部ip代理
run_process = Process(target=run)
# 启动所有进程
check_process.start()
crawl_process.start()
run_process.start()
# 等待所有进程结束
check_process.join()
crawl_process.join()
run_process.join()
if __name__ == '__main__':
proxy_run()