对于爬虫来说,当你的访问频率达到了目标网站设置的阈值时,就会触发目标网站的反爬机制。而封禁访问者ip就是很常见的一个反爬机制。当ip被封禁后,从此ip发出的请求将不能得到正确的响应。这种时候,我们就需要一个代理ip池。
什么是代理ip池?
通俗地比喻一下,它就是一个池子,里面装了很多代理ip。它有如下的行为特征:
1.池子里的ip是有生命周期的,它们将被定期验证,其中失效的将被从池子里面剔除。
2.池子里的ip是有补充渠道的,会有新的代理ip不断被加入池子中。
3.池子中的代理ip是可以被随机取出的。
这样,代理池中始终有多个不断更换的、有效的代理ip,且我们可以随机从池子中取出代理ip,然后让爬虫程序使用代理ip访问目标网站,就可以避免爬虫被封的情况。
今天,我们就来说一下如何构建自己的代理ip池。而且,我们要做一个比较灵活的代理池,它提供两种代理方式:
1.每次都通过http接口提取一个随机代理ip,然后在爬虫中使用此代理ip(大部分代理ip池服务都是这种形式);
2.使用squid3代理做请求转发,爬虫设置好squid3代理的地址,每次请求将由squid3自动转发给代理池中的代理。
代理池结构
代理池的组件可以大致描述如下:
1.代理IP的获取/补充渠道,定期把获取到的代理ip加入到代理池中
2.代理ip的验证机制,定期验证代理池中ip的有效性,并删除掉所有失效的ip
3.一个web服务,用以提供获取一个随机代理的api
4.squid3的维持脚本,它定期获取代理池中的可用ip,更新squid中的可转发代理列表
5.一个调度器,程序的入口,用来协调各组件的运行
如果不是很理解,没关系,请往下看,我会细说。
环境说明
为了实现代理IP池,我们如下的软件环境(列举主要部分):
1.redis服务器,用以存放代理池相关数据
2.flask,用以实现提取单个随机代理的api
3.squid3,用以实现代理转发
组件1-获取代理ip的渠道
我们有很多种渠道获取代理ip。笼统一点来说,可以分为两类,免费代理和收费代理。
免费代理,顾名思义嘛,最大的优点就是免费,不需要什么成本,网上搜一下就能找到。缺点也很明显,免费代理毕竟是免费的,所以质量根本不能保证,大部分无法使用,能用的多数也速度奇慢。
收费代理的质量相对来说就好多了,不同平台的代理质量和价格上都有些出入,可以自行比较。
个人学习的话,如果真的资金优先,可以考虑采集免费代理;如果资金相对充裕,可以花钱买一天或一周的代理使用,价格也不贵。我是比较推荐收费代理的,因为免费代理的质量真的不敢恭维。
企业商用的话,优先考虑收费代理吧,会稳定很多。
我选择的代理服务商是站大爷,声明一下,我真的没收广告费啊= =。坦言说,让我选择站大爷的最大原因是,它支持账号密码访问的模式。
没用过收费代理的朋友可能不清楚,使用收费代理平台的接口,从平台上批量提取代理ip或使用代理时,一般都是要绑定你的机器ip的。比如,你的机器ip是123.123.123.123,你就需要事先在平台上把ip绑定为123.123.123.123,这样,你只能通过IP为123.123.123.123的机器从平台提取ip,提取出的ip也只能由ip为123.123.123.123的机器使用,其他ip的机器都不行。当我们有多台机器的时候,就会非常尴尬了,毕竟不能给每台机器都买一次代理吧,很不划算。
在站大爷上面,除了绑定ip这个方法外,还可以选择使用账号+密码提取/使用代理,选择这个方法的话就不再受到IP地址的限制。讲道理,有点舒服啊= =
我下面的编码以站大爷为例,使用其他代理服务的可自行编写相关脚本,原理和逻辑都是相通的,部分细节上针对处理即可。
购买的细节我也不说了,如果需要购买的话,直接去官网购入短效优质代理即可。
转载于:https://blog.51cto.com/13152774/2359100