高频抓取某个网站的数据,很有可能就被网站管理员封掉IP,导致抓取数据失败,解决这个问题最直接,简单的方法就是使用代理IP。目前网上有不少提供付费代理IP的平台,但是如需长期使用,该方案是笔不少的开销。本项目通过抓取IP代理网站提供免费代理IP,并不间断的验证IP的有效性,根据代理IP验证的历史记录对IP进行评估,输出高质量代理IP。 源码:https://github.com/clelandgt/ip_proxy
第一步:爬取多个免费IP代理网站获得代理IP; 第二步:访问https://www.baidu.com/验证代理IP的有效性和响应时间,由于每次都能爬取10000+个代理,需要使用并发(多进程+协程)方式快速完成验证; 第三步:将验证通过的代理IP存入mongodb中; 第四步:睡眠一定时间; 第五步:开始验证数据库中的IP,根据每个IP的历史失败数和失败率淘汰掉一些低质量或失效的代理IP; 第六步:验证完数据库中的IP,如果数据库中的IP小于一个预设值(比如100),执行第一步,否则执行第四步。
完成以上系统和软件的安装,其中操作系统可以选择其他linux版本,软件版本没有特殊要求。
关于虚拟环境的详细介绍和使用详见:http://blog.csdn.net/ganzheyu/article/details/53014726
使用supervisord进行进程管理,当进程出现异常退出时,supervisord会重新启动该进程。
$ pip install supervisor #安装supervisord $ mv supervisord.conf /etc/supervisord.conf #默认配置文件在/etc下,所以将项目配置好的deploy目录下的supervisord.conf拷贝到/etc下。本项目需要监控的进程主要有两个,一个是IP代理核心流程”python ip_proxy.py”,另一个是提供外部API访问的”uwsgi uwsgi.ini”
[program:proxy_crawler] command=python ip_proxy.py directory=/root/webapp/ip_proxy/src/ip_proxy autostart=true autorestart=true stdout_logfile=/tmp/proxy_crawler.log [program:uwsgi] command=uwsgi uwsgi.ini directory=/root/webapp/ip_proxy/src autostart=true autorestart=true关于systemctl详细使用见:http://blog.csdn.net/ganzheyu/article/details/56335419
- 虚拟环境的加载