没有代理IP的帮助爬虫工做将止步不前,因此不少爬虫工程师都须要高效稳定的代理IP。用优质代理IP后,是否是就能够放心爬取了呢?其实,还须要优化方案,合理分配资源,提升工做效率,更高效更快速更稳定的进行爬虫工做。那么ipidea全球http总结出几种方案的并讲述其中的优缺点。数据库
方案1、每一个进程从接口中随机取一个IP列表(好比一次提取100个IP)来循环使用,失败则再调用API获取,大概逻辑以下:服务器
一、每一个进程(或线程),从接口随机取回一批IP回来,循环尝试IP列表去抓取数据;cookie
二、若是访问成功,则继续抓取下一条。ide
三、若是失败了(好比超时、出现验证码等),再从接口取一批IP,继续尝试。优化
方案缺点:每一个IP都是有有效期的,若是提取了100个,当使用了第10个的时候,可能后面的大部分都失效了。若是你设置HTTP请求的时候链接时间超时为3秒,读取时间超时为5秒,那你将会有可能浪费几秒的时间,说不定这几秒内已经能够抓取几十次了。idea
方案二:每一个进程从接口中随机取一个IP来使用,失败则再调用获取一个IP,大概逻辑以下:spa
一、每一个进程(或线程),从接口随机取回一个IP来,用这个IP去访问资源,.net
二、若是访问成功,则继续抓下一条。线程
三、若是失败了(好比超时、出现验证码等),再从接口随机取一个IP,继续尝试。代理
方案缺点:调用获取IP的行为很是频繁,会对代理服务器形成很是大的压力,影响API接口稳定,可能会被限制提取。这种方案也不适合,不能持久稳定的运行。
方案三:先提取大量IP导入本地数据库,从数据库里面取IP,大概逻辑以下:
一、在数据库里面建一个表,写一个导入脚本,每分钟请求多少次API(咨询代理IP服务商建议),把IP列表导入到数据库里面。
二、在数据库里面记录好 导入时间、IP、Port、过时时间、IP可用状态等字段;
三、写一个抓取脚本,抓取脚本从数据库里面读取可用IP,每一个进程从数据库获取一个IP进行使用。
四、执行抓取,对结果进行判断,处理cookie等,只要出现验证码或者失败就放弃这个IP,从新换一个IP。
这种方案有效的避开了代理服务器资源的消耗,有效的分配代理IP的使用,更加的高效和稳定,保障了爬虫工做的持久性和稳定性。