做爬虫抓取时,我们经常会碰到网站针对IP地址封锁的反爬虫策略。但只要有大量可用的代理IP资源,问题自然迎刃而解。
以前尝试过自己抓取网络上免费代理IP来搭建代理池,可免费IP质量参差不齐,不仅资源少、速度慢,而且失效快,满足不了快速密集抓取的需求。
收费代理提供的代理资源质量明显提升,经过多家测试,最终选定使用飞蚁代理作为代理提供平台。
飞蚁代理代理IP平台每天能提供大概200万个不重复的短效高匿代理,每个代理存活期为1-30分钟,总IP数有200多万,IP数量足够使用。价套餐灵活,按照ip数量与时长计费,可以按照日结,周结与月结,还有半年及一年的套餐可供选择。只要能满足项目要求,提供优质稳定的服务,这些成本值得付出。
飞蚁代理提供了大量的代理服务器资源,主要考虑如何将这些服务器分配给爬虫服务器使用。最初的想法是使用Redis作为代理服务器资源队列,一个程序自动获取飞蚁代理API提供的代理,验证可用后push到Redis里,每个程序再从Redis中pop一个代理进行抓取,但这样的缺点是不太好控制每台爬虫服务器的代理质量,有的代理速度快,有的速度比较慢,影响抓取效率,其次就是需要自行维护一套代理验证、分配的程序,增加了代码量,不便后期维护。
为了解决这些问题,我想到可以使用Squid提供的父代理功能,自动将爬虫服务器的请求转发给代理服务器。Squid提供了自动轮询功能,自动验证并剔除不可用的代理。减少了我们多余的验证步骤。
o由于网站提供的代理存活时间只有1-30分钟(由套餐决定),所以需要每隔一段时间重新获取一批新IP
PEER_CONF=“cache_peer%sparent%s0no-queryweighted-round-robinweight=1connect-fail-limit=2allow-missmax-conn=5”
withopen(‘/etc/squid/squid.conf.original’,‘r’)asF:
squid_conf.append(PEER_CONF%(proxy[0],proxy[1]))