如何才能资源利用最优化、最合理的使用代理IP来抓数据,下面的文章可以提供一些思路,这也是百变IP官网建议的实现方式。
极度不推荐:【方案一】每个进程从接口API中随机取一个IP列表来循环使用,失败则再调用API获取,大概逻辑如下:
step1:每个进程(或线程),从接口随机取回一批IP回来,循环尝试IP列表去抓取数据;
1、我们知道每个IP都是有有效期的,当你取回来一个列表的时候,比如列表里面第一个IP有效期100秒,第二个有效期80秒,第三个110秒,第四个50秒,当你尝试第一个的时候比如一直成功用了50秒,然后被封,要换IP了,继续尝试第二个,这时候第二个有效期已经还剩余30秒了,第四个已经过期了。如果你设置HTTP请求的时候连接时间超时为3秒,读取时间超时为5秒,那你将会有可能浪费3-8秒的时间,说不定这3-8秒已经可以抓取几十次了。
不推荐但也能跑:【方案二】每个进程从接口API中随机取一个IP来使用,失败则再调用API获取,大概逻辑如下:
A、压力和效率:API调取十分频繁,会对百变IP的接口造成压力,另外你调用的时候也会耗时比如每次耗时100ms,浪费时间,压力这个目前还好,我们的API直接用Nginx读取Redis,接口性能没有问题。PS:不过还是建议弄一个脚本每秒请求一次接口,把IP读到本地存到数据库或者Redis,然后其他进程从本地随机取一个IP,这样效率高(这样做要注意实时剔除不可用的IP,即本地有,接口未返回的要删除)。
B、资源竞争:比如你15个进程同时随机去取,例如我们IP池同时有30个可用,因为是随机取一个,所以不能保证两个或多个进程不取到同一个IP,这样频率高了,对方就有可能封这个IP。倒是可以调用接口的去重功能。
C、遇到被封的IP,你也无法告诉API,下次不会给你返回被封IP了。当前API去重只能保证每天不重复。隔天是有可能重复的,因为有些IP当天被封,隔天说不定就可以用了,这些阈值还是使用方自己控制比较好。
所以,尽可能做个策略,尽可能让每个进程(或线程)使用一个IP,不要多个进程使用一个IP。
step1:在数据库里面建一个表,写一个导入脚本,每分钟请求60次API,把IP列表导入到数据库里面(接口返回的是实时可用的,百变IP会实时检测,你的检查肯定没有我们这边实时,如果接口里面没有而数据库里面有,则删除或者标记为不可用,反之则插入或者更新。)。
step2:一定是每分钟请求60次,不要每分钟3次或者每分钟5次。知道为什么吗?比如一个IP的有效期从18:00:01分开始算有效期60秒,你18:00:00来请求的时候是拿不到的,当你18:00:20来拿的时候,它只剩下40秒了,就是有可能少20秒。
step3:在数据库里面记录好导入时间、IP、Port、过期时间、当前有多少进程在使用这个IPIP可用状态等字段;
step4:写一个抓取脚本,抓取脚本从数据库里面读取可用IP,每个进程从数据库获取一个IP,获取一个状态可用,使用的进程少的IP,当然也可以控制每个进程只使用一个IP,如果没有符合条件的IP,则循环Sleep1秒等待新的IP出现。
step5:执行抓取,对结果进行判断,处理cookie等,只要出现验证码或者失败就放弃这个IP(在数据库里面标记为不可用或者直接删除,另外如果是标记为不可用的话,如果目标站只封1小时,那可以1小时以后如果接口里面又返回这个IP,那可以再标记为可用),重新换一个IP。
方式一:使用百变IP-Proxy,统一入口,支持免提取调用,设置白名单后即可使用,支持每次请求随机一个IP出口,或者多次请求使用同一个IP作为出口。
通道B::~这20个端口,每次请求都会固定一个出口IP,IP有效期10s-5分钟。如果在请求之前想知道出口IP和剩余可用时间,可通过这个接口获取。
通道A和使用B调用方式完全一样,不用做任何额外改造,只需要在程序中控制请求端口号就行了(比如你用通道B的端口,然后现在想换一个IP当出口,只需要换就好了,不需要发送换IP的命令给我们),超级方便,百变IP会自动切换后端出口IP,百变IP智能转发服务会根据后端服务器的心跳情况、负载情况、网络稳定性、IP分散度等综合因素根据算法智能转发。系统支持Keep-Alive。智能转发服务不会出现因为切换IP而出现服务不能用的情况,平滑切换。
作为一名网络工程师,如果说别人的分享都是爸爸级别的,那么我的分享绝对是爷爷级别的。爬虫怎么用代理IP超详细超干货经验直接分享给你!
从接入方式上看,常规爬虫都是使用API接入代理并使用的,这里面又分常规轮转时长切换模式和Session模式,有些服务商支持,有些不支持。需要代理服务商推荐,可以看下这篇回答,讲解还是很靠谱。
关于代理IP的相关知识点就分享到这,如果觉得内容不错,可以关注我,我会持续给你分享最新代理IP资讯~~
单一IP访问频率高会被目标网站限制访问或直接拉小黑屋,需要切换代理IP才能继续进行数据采集,推荐使用隧道代理,能自动切换代理IP,更为稳定便捷,以下是对部分代理供应商的HTTP隧道代理测试:
以下测试网站除了少部分验证header中某些参数以外,没有其他反爬,具体表现是同一个IP频繁请求会出现验证码、403、跳转登录、返回JS二次设置Cookie等情况,测试中已排除其他反爬,保证了测试结果只与IP的质量有关: