分布式爬虫需要优化代理IP的收集,因为技术人员在使用分布式爬虫或者多进程爬虫时,一旦目标受限,很可能会使用代理IP,所以代理IP的搜索还是需要注意的。
爬网程序使用的代理IP不能是开放的,并且您必须找到一个高隐私性的代理IP。
动态IP-企业级稳定高隐藏代理IP
动态IP——企业级稳定、高速、高隐藏代理IP,千万级IP导出池,爬虫最佳选择。
我们如何优化使用代理IP进行数据收集?下面小编就提供一些思路。一般来说,有几种方法:
分布式爬虫需要代理IP来优化收集。
建议:【方案一】先导入数据库,从数据库中获取IP。一般逻辑如下:
第一步:在数据库中建表,写导入脚本,每分钟请求API 60次,将IP列表导入数据库(界面返回实时可用,不断变化的IP会被实时检测到。你们的检查肯定没有我们实时。如果界面中有一个,但数据库中有一个,则删除它或将其标记为不可用,否则插入它或更新它。)。
第二步:必须是每分钟60个请求,而不是每分钟3或5个请求。你知道为什么吗?例如,IP的有效期为18:00:01开始的60秒。18:00:00点请求就拿不到了。18:00:20接的时候,它只剩下40秒了,也就是可能少了20秒。
步骤3:在数据库中记录导入时间、IP、端口、到期时间以及当前有多少进程正在使用该IP的字段IP可用状态;
第四步:写一个抓取脚本。抓取脚本从数据库中读取可用的IP。每个进程从数据库中获得一个IP,以及一个具有可用状态和少量进程的IP。当然,你也可以控制每个进程只使用一个IP。如果没有合格的IP,循环睡眠1秒,等待新的IP出现。
第五步:执行抓取,判断结果,处理cookie等。,只要有验证码或者失败,就放弃这个IP(在数据库中标记为不可用或者直接删除,如果标记为不可用,如果目标站只封了1个小时,在接口中返回这个IP可以在1个小时后标记为可用),换成另一个IP。
动态IPIP动态转发支持免取呼叫。
方法一:使用动态IPIP,统一入口,支持无抽取和调用,设置白名单后即可使用。您可以为每个请求随机使用一个IP出口,或者为多个请求使用同一个IP出口。
答:proxy.hemaip.com:8000每次随机有一个出口IP。
通道B: proxy.hemaip.com: 8001 ~ 8020这20个端口,每个请求都会固定一个出口ip,IP有效期1-5分钟。如果想知道请求前的出口IP和剩余可用时间,可以通过这个接口获取。
通道A的调用方式和通道B完全一样,不需要做任何额外的修改,只需要在程序中控制请求的端口号即可(比如你用的是通道B的8001端口,现在你想换一个IP作为出口,只需要换8002,不需要给我们发换IP的命令)。超级方便,智能IP会自动切换到后端。
以下是比较麻烦的方式,一般不推荐。
【方案二】每个进程从接口API中随机选择一个IP列表进行回收。如果失败,那么调用API来获取它。一般逻辑如下:
Step1:每个进程(或线程)从接口随机检索一批IP,循环尝试IP列表抓取数据;
第二步:如果参观成功,继续赶下一趟。
第三步:如果失败(比如超时,验证码等。),从界面随机取另一个IP,不断尝试。
第二种是最错误和最低效的方法,原因如下:
我们知道每个IP都有到期日。例如,当您检索列表时,列表中的第一个IP的到期日期为100秒,第二个IP的到期日期为80秒,第三个IP的到期日期为110秒,第四个IP的到期日期为50秒。比如你尝试第一个IP的时候,已经成功使用了50秒,然后就被屏蔽了。是时候换IP了。继续尝试第二个IP。此时,第二个有效期还剩30秒。第四。如果在进行HTTP请求时,将连接时间超时设置为3秒,读取时间超时设置为5秒,那么很可能会浪费3-8秒,这可能足够抓取几十次。
该方案可以运行,但边肖并不特别推荐给大家使用。
【方案三】每个进程从接口API中随机选择一个IP使用。如果失败,它将调用API来获取它。一般逻辑如下:
步骤1:每个进程(或线程)从接口中随机获取一个IP,并使用这个IP访问资源。
第二步:如果参观成功,继续赶下一趟。
第三步:如果失败(如超时、验证码等。),从界面随机取另一个IP,不断尝试。
方案的缺点:
A.压力和效率:API调用非常频繁,会对智能IP的接口造成压力。另外,打电话的时候会耗费时间,比如每次100ms,浪费时间。目前压力不错。我们的API直接用Nginx读取Redis,接口性能没问题。
B.资源竞争:比如你同时随机选择15个进程。例如,我们同时有30个可用的IP池。因为我们随机选择一个,所以我们不能保证两个或更多的进程不会获得相同的IP。这样一来,如果频率高,对方可能会屏蔽这个IP。您可以调用接口的重复数据删除功能。
c,遇到被屏蔽的IP不能告诉API,下次也不会被返回被屏蔽的IP。目前API去重只能保证每天不重复。第二天有可能重复,因为有些IP当天就被屏蔽了,第二天可能就可以用了。这些阈值最好由用户自己控制。
所以,尽量制定每个进程(或线程)尽可能使用一个IP的策略,不要多个进程使用一个IP。
以上描述了分布式爬虫需要代理IP优化集合,也提供了几个优化思路,仅供大家参考。