上周的公众号文章提到了Bright Data提供的代理服务。没想到他们的运营同学竟然找上了门,问我能不能帮他们做一个评测。

我之前使用Bright Data的代理,是因为突然有一天我的HuggingFace爬虫挂了。比较奇怪的是,这个爬虫在我电脑上始终正常运行,但一放到服务器上就请求失败。联想到HuggingFace被封了,而这个爬虫之前一直使用的国内代理供应商,那么原因就很明显了。因为我的电脑是24小时挂着梯子的,所以能够正常访问HuggineFace,但爬虫部署到服务器上面以后,他会自动使用配置好的国内代理。由于国内代理也受到GFW的影响,因此也会出问题。

首先看一下Bright Data他们代理的基本功能,基于数据中心的隧道代理和基于住宅IP的隧道代理还有基于Sim卡的隧道代理。海外代理都是按流量收费的,确实比较贵,如下图所示。数据中心的代理IP,每GB流量收费0.1美元。住宅IP的代理IP,每GB流量收费15美元。


以数据中心代理为例,我开通的是隧道代理,只需要设置一个固定的地址,爬虫每次请求自动都会使用不同的IP。如下图所示:

当我们不使用代理时,访问HuggingFace会出现一直没有响应最后超时的情况。当我们在海外服务器上面使用代理访问HuggingFace时,一切正常。

作为海外代理,Bright Data的隧道IP在海外服务器上面访问HuggingFace是正常的。如下图所示:


需要注意的是,这种爬虫代理不是梯子。直接使用它,在国内是无法访问墙外网站的。GFW有一万种方法识别它。所以我们只有使用海外的服务器来运行。这不是Bright Data的问题,所有爬虫代理都是这样的。

我们今天测试一下代理的稳定性。在测试其他很多代理供应商时,请求量多了经常会出现Caused by ProxyError('Cannot connect to proxy'...这种报错,还需要我们自己来写重试逻辑。而Bright Data的隧道代理把所有重试都帮我们做了。我们分别在我家的宽带和我的Azure香港服务器上面,测试数据中心IP和住宅IP的代理可用情况。

测试代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import requests
import pandas as pd

proxies = {
'http': 'http://帐号:密码@brd.superproxy.io:22225',
'https': 'http://帐号:密码@brd.superproxy.io:22225',
}



result = []
for _ in range(100):
try:
response = requests.get('https://lumtest.com/myip.json', proxies=proxies, timeout=5)
info = response.json()
info.update(info.pop('geo'))
info.update(info.pop('asn'))
result.append(info)
except Exception as e:
print(e)


df = pd.DataFrame(result)
len(df.index)

数据中心代理,在我家的网络进行测试:

测试下来,100次请求,有7次请求超过5秒报错。剩下93次在5秒内完成。这93次成功请求的信息如下:

国家分布如下图所示:

说明Bright Data的代理确实在全球分布的。

当我把timeout设置为10秒时,只有2次请求超时。

当我把timeout设置成20秒时,所有请求全部成功。经过多次测试,所有请求最终都能在20秒内完成,不会出现除了超时外的其他报错。说明他们内部做了异常的自动重试机制,能确保你的请求始终能够成功。

接下来,我在Azure香港服务器上面测试,这次稳定性高了不少,100次请求只有1次超过了5秒。如下图所示:

把timeout设置成10秒以后,所有请求全部成功。

接下来,测试住宅IP的使用请求。更换了帐号密码以后,在我家的网络测试效果如下:

有88次请求能够在5秒内完成。12次请求超过5秒报错。注意图中的红色警报并不是错误。是因为家庭代理需要安装Bright Data的证书。如果不使用证书,就需要在Requests的请求中加上verify=False。于是Request就会有这个警告。

在Azure香港服务区测试住宅IP的效果如下图所示,所有请求全部能够在5秒内完成。

经过这次测试,可以看到Bright Data的稳定性还是不错的。除了代理外,Bright Data还提供爬虫浏览器和验证码破解接口。大家有空可以试一试。扫码注册可以获得免费试用。