抓取代理服务,主要依赖cronjob,包括以下几个部分:
调度任务,主要根据爬虫和验证器配置的时间规则,按时把任务扔进redis让worker执行。
- 启动: ./master.sh
轮询任务队列,一旦有任务就发起一个新的协程执行任务,对验证器来说,比如RawValidator,当需要验证的ip太多的话,每2分钟新起一个验证器并不会耗费太多资源,同时会加快验证速度。worker主要会执行两种任务,即爬虫和验证器。
现在本项目都在ipfeeder/cronjobs/spiders下,目前有下面几种爬虫:
RawValidator,验证新爬到的ip,如果验证通过的话分别放进http set和https set,现在每2分钟会调度起一个新的RawValidator,也就是至少需要两分钟才会在api接口里面获得有用的代理ip。需要注意如果时间间隔太短,比如设为1s,每一秒新起一个新的协程,可能会造成并发太高而出现其他问题,比如验证用的网站httpbin.org压力太大。HttpValidator, 每过一段时间发起一个新的HttpValidator去重复验证已经通过验证在http set中的数据,未通过验证会被丢弃HttpsValidator,同上
验证规则:
验证时候会用需要验证的ip作为代理,访问settings.VALIATE_HTTP_URLS(http), settings.VALIATE_HTTPS_URLS(https),获取X-Forwarded-For (XFF),如果XFF的第一个ip和代理ip相同,即认为通过验证,需要注意的是,这个规则下只验证了匿名ip。
现在配置文件里面的settings.VALIATE_HTTP_URLS和settings.VALIATE_HTTPS_URLS指定的都是httpbin部署的网站,也可以根据需要添加自定义验证规则。
- 启动方式 ./worker.sh
通过api形式提供已通过验证的代理ip。
-
URL:
http://localhost:5000/proxies?limit=10&protocol=http -
URL:
http://localhost:5000/proxies?protocol=https -
URL:
http://localhost:5000/proxies -
启动方式 ./web.sh
如果安装了docker和docker-compose, 可以执行
make docker-run
- 修改配置文件
ipfeeder/settings.py,特别是配置redis - 创建pyhton虚拟环境,安装依赖
pip3.6 install -r deploy/requirements/prod.txt - 分别执行
./deploy/worker.sh,./deploy/master.sh,./deploy/web.sh