通过爬虫程序实现数据采集时经常会使用代理IP服务商提供的http代理服务。通常这些服务商会提供一个用于提取IP的URL接口,就像这样:
var url_for_get_proxy = `http://服务商域名 /getip? num=${newProxyCount}&其他参数` |
简单的实际使用场景是:爬虫程序先调用上面的接口获取一个IP,同时还可以获取到这个IP的有效时间(还有一些服务商的IP时效的在购买套餐时就约定好的,是一个固定时间),爬虫程序会在有效时间内一直使用这个代理IP,直到这个代理IP失效。在大部分情况下,以上做法是可以接受的,但当采集量很大,需要使用的代理IP很多的情况下,或者更专业的采集工作中,通常都会用到代理IP池。
代理池的架构是这样的:
代理IP池服务从代理厂商提取IP,将代理IP暂存在内存中(或redis中),每次有爬虫程序来获取,它会从内存中选择一个“空闲”的IP并返回给爬虫程序,同时将这个IP标记为“使用中”,并记录这个IP被分配出去的时间,时间越早,这个IP会被认为越“空闲”。代理池会有一个设置“代理IP的独享时间”,可以通过这个参数来调节代理池中的IP被并发使用的程度。最终,这个代理IP池服务具有以下特征/功用:
1、对爬虫程序提供一个简单的HTTP URL接口,简单调用就能获取一个可用的IP。
2、代理IP是被缓存起来的、缓存的IP数据可根据使用需求动态调节,IP可复用、能有效分配的。
3、可以对代理IP的消耗情况进行统计、提供方法让爬虫程序通过简单的配合后能统计出代理IP的数据产出率、代理可用率进行统计。
4、可以设置:某一类型的爬虫程序进行每日代理IP用量限制。
在从事数据采集工作的过程中,关于代理IP使用,我们有非常成熟的具体实现,我们按照以上思路开发的代理池服务程序,借助它,我们每天能让十万甚至几十万代理IP合理有效的被使用。