企业对非结构性数据的需求成指数增长,采集互联网公开数据也是获取非结构数据的常见的方式之一,而若想有效解决地域问题和风控问题导致的数据获取失败,代理IP是进行规模采集时不可或缺的一部分。
本文会对某知名公司的代理产品做一个测评,测评会对业内常见的代理IP解决方案做一个分析和对比,然后详细介绍某知名公司的不同类型的代理IP,以及与同类型的其他代理公司做一个简单的对比,为有代理需求的企业和个人提供一些参考和帮助。
方案一:收集互联网上某些站点定期提供的免费代理IP来使用。这种方案唯一优点就是免费。缺点也显而易见,首先是IP质量和稳定性差,原因是使用的人太多;其次是IP数量较少,无法满足一定规模的采集。因此这种方案只适用于个人简单测试而已,无法用于生产环境。
方案二:自己购买服务器、公网IP来搭建代理IP池。有些企业会选择这种方案来构建代理服务,这种方案的优点就是服务的稳定性、规模都是自己来掌控,可以根据自己的需求扩缩容。缺点就是搭建和维护成本极高,需要有大量的服务器和公网IP资源支撑,维护成本也是极高的,还有比较关键的一点就是一般企业掌握的公网IP都是数据中心的IP,使用这些IP去采集风控比较严格的平台,一般都是禁止访问的。
方案三:购买第三方代理服务。目前市面上有很多能提供代理IP服务的厂商,企业可以选择直接购买他们的服务,这种方式相对比较直接,无需搭建、维护代理相关的服务,直接拿来用即可,这种方案也是我比较推荐的一种。但由于可以提供服务的厂商太多了,往往令企业和用户不知道如何选择,这里有个小建议,就是在选择购买代理前先向厂商要一个测试,然后自己使用这些测试代理IP去做一个全面的测试,大致评估:不重复代理IP数量的量级、代理访问成功率、代理地域分布等,这样我们就能很清楚的了解这个代理服务的规模、质量到底如何,而不是盲目听信广告或销售所描述的虚假信息。
三种方案对比总结:
对比项 |
公开免费代理IP |
自建代理IP |
第三方代理IP服务 |
稳定性 |
较差 |
较为稳定 |
取决于代理服务商 |
规模化 |
无法规模化 |
可规模化,但成本极高 |
取决于代理服务商 |
易维护性 |
易维护 |
运维难度高、成本高 |
一般都易维护 |
服务商选型 |
无 |
无 |
服务商众多,选择困难 |
成本 |
免费 |
规模越大成本越高 |
取决于代理服务商 |
我个人以及企业都更倾向于使用知名厂商的代理产品,毕竟大厂商在各个方面都是有保障的,对于个人来讲按需使用成本也是可控的,而对于企业则节省了大量人力、硬件成本。
接下来我们来介绍下亮数据 Bright Data的代理解决方案,亮数据 Bright Data目前有四种类型的代理IP,分别是:数据中心IP、静态住宅IP、动态住宅IP、移动端IP。不同类型的IP可以满足不同业务场景的需要,我们一一来看一下这几种类型的IP有什么不同。
所谓数据中心IP就是在各个数据中心网络下构建的代理IP,这些IP比较固定,由于是在数据中心环境下构建的,因此服务的稳定性、响应速度比较有保障,但缺点就是爬取一些风控较高的平台可能会受限,被平台标记为风险IP,导致无法访问,所以这种IP适用于采集风控较低的平台,而且价格相对比较低廉。亮数据 Bright Data的数据中心IP量级大概在70万左右,而且支持共享模式和独享模式,共享就是大家同时共用一个IP池子,独享就是在你租用代理IP期间,别人无法使用。
静态住宅IP是由ISP,也就是运营商直接提供的IP,跟我们向运营商购买家庭宽带服务所提供的IP是一样的,这种IP对于目标采集平台来讲,是比较可信的IP,不像数据中心IP特征那么明显;还有这种IP是静态的,一般不会频繁变更,综上所述该IP适用的场景就是需要小规模且固定的ISP IP(隐匿性较高)的场景;此类型代理不太适用于需要大量IP的场景,因为此类型的IP量比较小,亮数据 Bright Data的静态住宅IP量级大概在10万左右,也支持共享模式和独享模式。
动态住宅IP是由大量真实家庭宽带IP构建的代理网络,一些家庭会选择将自己购买的宽带共享出去以赚取一定的报酬,比如有些家庭白天都在上班,家庭的宽带都是空闲的,因此可以选择白天将宽带IP共享出去。这种IP的真实性非常高,因为家庭成员肯定都有访问常见的网站、app等,也就是大概率被平台标记为真实用户,加上IP的数量非常庞大,因此这种类型的IP被风控的概率会非常低,适用于采集风控高的平台。但是这种类型的IP也有它的缺点,就是这种IP不稳定,不能固定使用,就像刚才说的,能不能用,什么时候能用取决于这个IP的主人所采用的共享策略,所以对于一些需要固定IP的场景,比如需要用户登录的场景就不适用,因此一旦登录,那么平台就知道你的身份了,这时如果来回切换IP,则可能会触发风控。目前亮数据 Bright Data动态住宅IP的量级已经达到了7200万。
所谓移动端IP就是我们常用的3G/4G/5G网络产生的IP,这些IP有一个特点就是被目标采集平台风控的概率是所有类型IP中最低的,那么为什么呢?原因是这些IP是由各个地方的基站产生的,也就是只有在某个基站附近的用户才会被分配到那个基站所产生的IP,也就是平台无法根据IP去封禁,因为IP哪个用户都有可能被分配到,如果封了,很可能影响其他正常用户,所以平台一般不会针对移动端IP去做限制,因此这种类型的IP适用于风控较严格的平台。亮数据 Bright Data移动端IP数量级大概在400万左右。
首先说说优点,第一,亮数据 Bright Data是全球最大的代理IP网络,拥有的IP数量极其庞大,赢得了很多评测机构评选的最大代理商的头衔,而且IP分布在全球各地,所以很适合采集全球化的平台,如亚马逊、eBay、谷歌等。
第二,支持丰富的代理IP类型,多种类型能支撑不同场景、不同平台的数据采集,同时也能灵活定制采集策略,比如优先使用数据中心IP(成本低),当遇到风控时再使用住宅IP、移动端IP,这样能有效节省成本。
第三,代理IP质量和稳定性都很优秀,经测试,访问Amazon、Google、eBay、Youtube,代理访问成功率都能达到90%以上,响应时间平均也都在5秒以内。
第四,安全合法,亮数据 Bright Data所掌握的住宅IP都是经过用户授权的,且允许采集的目标平台都是需要经过审核的,因此企业可以放心使用。
再说说缺点,第一,价格偏贵,尤其是采集数据量比较大的场景,因为代理是按流量付费的,要是长期使用的话成本确实不小,所以这一点企业要做好评估,看是否在预算范围内。
第二,官方文档不够完善,虽然亮数据 Bright Data官方有较为全面的FAQ,但普遍内容比较浅,缺乏深入的使用教程和场景用例,这对于想深入使用的用户比较不友好。
在亮数据 Bright Data管理后台创建代理通道,选择你想使用的代理类型:
进行代理通道配置:
获取代理的信息:
调用代理,这里使用python3示例代码:
import urllib.request
opener = urllib.request.build_opener(
# 设置请求代理,zone-后面为创建的代理通道名称,xxx为用户和密码信息
urllib.request.ProxyHandler(
{'http': 'http://xxx-zone-residential:[email protected]:22225',
'https': 'http://xxx-zone-residential:[email protected]:22225'}
)
)
# 发起请求并读取数据进行打印
print(opener.open('http://lumtest.com/myip.json').read())
执行结果:
代理API除了支持上述的基本调用外,还支持自选代理IP国家、选择超级代理类型、DNS解析策略等,而且可以在管理后台选择好参数,自动生成对应的API:
还有一个需要注意的点,如果你是中国用户,那么超级代理要选择CN super proxy,不然可能会出现访问失败的问题。
可以看到整体的代理使用还是简单易上手的。
接下来再通过一个采集google的案例,比较一下数据中心IP和住宅IP的使用效果。
这次我们将 Bright Data代理集成到Scrapy爬虫框架上使用。首先我们通过开发一个Scrapy的下载器中间件,来调用Bright Data代理:
from w3lib.http import basic_auth_header
class BrightProxyMiddleware(object):
download_timeout = 60
@classmethod
def from_crawler(cls, crawler):
return cls(crawler.settings)
def __init__(self, settings):
# 实例化时从爬虫配置文件中获取代理信息
self.proxy_url = settings.get('PROXY_URL')
self.proxy_user = settings.get('PROXY_USER')
self.proxy_pass = settings.get('PROXY_PASSWORD')
def process_request(self, request, spider):
# 请求体中设置配置的代理,实现代理调用
request.meta['proxy'] = self.proxy_url
request.headers['Proxy-Authorization'] = basic_auth_header(self.proxy_user, self.proxy_pass)
request.meta['download_timeout'] = self.download_timeout
接下来我们在爬虫类里通过custom_settings指定代理和中间件的配置,这里我们先尝试使用数据中心IP:
class SerpSpider(scrapy.Spider):
# 爬虫名称
name = 'google'
# 配置
custom_settings = {
'PROXY_URL': 'http://zproxy.lum-superproxy.io:22225',
# 使用数据中心IP
'PROXY_USER': 'brd-customer-xxxxxx-zone-data_center',
'PROXY_PASSWORD': 'xxxxxxx',
# 指定代理中间件
'DOWNLOADER_MIDDLEWARES': {
'brightdata.middlewares.BrightProxyMiddleware': 350
},
}
def start_requests(self):
# 请求google 100次
url = 'https://www.google.com.hk/search?q=pizza'
for i in range(100):
yield scrapy.Request(url=url, meta={"index": i}, callback=self.parse, dont_filter=True)
def parse(self, response):
index = response.meta["index"]
# 将返回的html存放到文件中
with open(f'google_{index}.html', 'w') as file:
file.write(response.text)
执行爬虫:
$ scrapy crawl google
执行完后,查看下载下来的文件,可以看到100个页面只下载下来了18个:
通过日志可以看到基本都被反爬了:
接下来我们切换动态代理IP试试,只需改变custom_settings的PROXY_USER和PROXY_PASSWORD即可:
custom_settings = {
'PROXY_URL': 'http://zproxy.lum-superproxy.io:22225',
# 使用动态住宅IP
'PROXY_USER': 'brd-customer-xxxxx-zone-residential',
'PROXY_PASSWORD': 'xxxxx',
'DOWNLOADER_MIDDLEWARES': {
'brightdata.middlewares.BrightProxyMiddleware': 350
},
再执行爬虫看效果:
可以看到这次100个页面都下载下来了,而且查看html页面也都是成功页面。
从这个案例中我们可以看到住宅IP在采集风控比较严格的平台google时,表现比数据中心IP好很多,因此我们在选用代理IP时一定要根据自己的业务场景以及平台的风控等级来选择合适的代理IP,这样才能高效的获取数据。
最后对各个代理IP解决方案的不同维度打了个分,仅代表个人看法:
评价项 |
BD数据中心IP |
BD静态住宅IP |
BD动态住宅IP |
BD移动端IP |
自建代理 |
公开免费代理 |
代理IP数量 |
★★★☆☆ |
★★☆☆☆ |
★★★★★ |
★★★☆☆ |
★★☆☆☆ |
☆☆☆☆☆ |
代理IP分布 |
★★★☆☆ |
★★☆☆☆ |
★★★★★ |
★★★☆☆ |
★★☆☆☆ |
☆☆☆☆☆ |
代理IP响应速度 |
★★★★★ |
★★★★☆ |
★★★☆☆ |
★★★★☆ |
★★★★★ |
☆☆☆☆☆ |
代理IP可用率 |
★★★★★ |
★★★★★ |
★★★★☆ |
★★★★☆ |
★★★★★ |
☆☆☆☆☆ |
抗风控能力 |
★★☆☆☆ |
★★★★★ |
★★★★★ |
★★★★★ |
★★☆☆☆ |
☆☆☆☆☆ |
易用性 |
★★★★★ |
★★★★★ |
★★★★★ |
★★★★★ |
★★★★☆ |
★★☆☆☆ |
价格 |
★★★☆☆ |
★☆☆☆☆ |
★★☆☆☆ |
★☆☆☆☆ |
★☆☆☆☆ |
★★★★★ |
亮数据Bright Data价格的竞争力较低是事实,但是在个人和企业使用代理IP的时候需要考虑的不仅是价格的问题,所谓贪小便宜误大事,就比如某911悄无声息的消失之后,使用其代理的简直是哀鸿遍野一片,这样的事情肯定谁都不希望遇到。因此在选择代理的时候,尤其目的是商用,更应该注重质量,效率,成功率等等。