抓取代理服务,主要依赖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