如果没有代理ip,爬虫业务肯定没有办法工作,所以大部分爬虫工作者都会购买安全稳定的代理ip。使用高质量的代理ip后,你能没有后顾之忧吗?不会那么容易。我们需要改进方案,有效分配资源,提高工作效率,快速、稳定、高效地完成爬虫。
方案一。每个进程从接口API中随机选择一个IP列表重复使用,失败后再调用API获取。一般逻辑如下:
1.对于每个进程,从接口随机检索一批ip,反复尝试ip目录抓取数据;
2.如果访问成功,继续抓取下一个。
3.如果失败,请从接口中取出一批IP,然后重试。
3.如果失败,请从接口中取出一批IP,然后重试。
缺点:每个IP都有时间限制。如果抽取一百个,用第二十个,可能剩下的大部分都用不上。如果设置HTTP请求时连接时间超时为3秒,读取时间超时为5秒,可能需要3-8秒,在这3-8秒内可能被抓取上百次。
方案二:每个进程从接口API中随机选择一个IP使用。如果失败,它调用应用编程接口来获取一个IP,一般逻辑如下:
1.每个进程从接口中随机检索一个ip,并使用这个ip来浏览资源。
2.如果访问成功,继续赶上下一个。
3.如果失败,从接口中随机选择一个IP并继续尝试。
缺点:调用API获取IP的行为非常频繁,会给代理服务器带来很大的压力,影响API接口的稳定性,可能会限制抽取。这种方案不适合,不能长期稳定运行。
方案三:首先提取大量IP导入本地数据库,从数据库中提取IP。一般逻辑如下:
1.在数据库中创建一个表,编写一个导入脚本,以及每分钟有多少个API请求将IP列表导入数据库。
2.在数据库中记录imPort时间、IP、端口、过期时间、IP可用性等字段;
3.编写一个爬行脚本,从数据库中读取可用的IP,每个进程从数据库中获取一个IP供使用。
4.进行抓取,判断结果,处理cookie等。如果有验证码或者失败,放弃这个IP,换成另一个IP。
该方案有效避免了IP代理服务器资源的消耗,有效分配了代理IP的使用,更加高效稳定,保证了爬虫工作的持久性和稳定性。