在爬虫与反爬虫斗争愈演愈烈的情况下,各大网站和 App 的风控检测越来越强,其中一项就是 IP 封禁。
为了解决 IP 封禁的困扰,一个有效的方式就是设置代理,设置代理之后,爬虫可以借助代理的 IP 来伪装自己的真实 IP 地址,从而突破反爬虫的限制。
但代理的质量有高有低,比如市面上的免费代理,几乎绝大多数都是不可用或者被封禁的状态,而有些付费普通代理也陆续被加入了各大网站和 App 的风控黑名单。因此,现在可以用作高质量数据爬爬取的代理越来越少了,目前市面上质量较高的代理主要有独享代理、ADSL 代理、移动蜂窝代理这几种类型。
本代理服务就是基于移动蜂窝网络(4G、5G)的隧道代理服务,本文档会介绍此服务的申请和使用方法。
移动蜂窝代理
移动蜂窝代理,其实就是基于手机流量搭建的代理服务,所有的代理 IP 都是手机真实的 IP。此种代理在爬虫领域使用相对较少,因此被封禁的概率也更小,所以此种代理对于爬取一些风控极强的网站和 App 的爬取有很好的效果。
本代理服务背后是基于一个大规模的群控手机池搭建的代理服务,所有流量都经由纯正的手机流量转发,支持市面上几乎所有网站和 App 的数据请求,代理质量极高,能够极大减小风控概率。
申请方法
要使用蜂窝代理服务,可以首先到「申请页面」进行申请,首次申请有 1 积分免费额度,约 17.5MB。
如果您尚未登录,则会自动跳转到登录页面,登录之后继续申请即可。
使用方法
申请完毕之后,可以到「控制台」中查看本人的申请结果,如图所示:
点击 「Credentails」,即可查看使用蜂窝代理服务的用户名及密码,以冒号分隔,其中用户名是 8 位,密码是 32 位,如图所示:
本移动蜂窝代理是一种隧道代理,因此使用的时候只需要设置一个固定的代理隧道即可,代理隧道的地址和端口分别是 cellular.proxy.acedata.cloud 和 30000,是 HTTP/HTTPS/SOCKS 协议的代理隧道,但此代理隧道可以用于爬取 HTTP 和 HTTPS 协议的网站。
下面以 Python 为例演示该代理隧道的设置方法:
import requests
proxy = 'https://<8位用户名>:<32位密码>@cellular.proxy.acedata.cloud:30000'
proxies = {
'http': proxy,
'https': proxy
}
for _ in range(3):
resp = requests.get('http://myip.ipip.net', proxies=proxies)
print(resp.text)
这里我们首先声明了代理的 URL 并定义为 proxy 变量,协议是 http 协议,后面跟随隧道代理的用户名和密码(即控制台展示的用户名和密码,二者以冒号分隔),后面再跟一个 @
符号,再跟代理的地址和端口即可。
接着声明了一个 prixies 变量,配置了两个键值对,键名分别为 http 和 https,其键值都是 proxy,代表对于 HTTP 和 HTTPS 协议的网站,都是用 proxy 变量定义的代理来进行请求。
接下来定义了三次循环进行代理的测试,这里请求的 URL 是 http://myip.ipip.net,这个站点可以返回请求该站点的真实 IP 地址和 IP 所在地域。
运行结果如下:
当前 IP:60.27.158.243 来自于:中国 天津 天津 联通
当前 IP:116.130.209.234 来自于:中国 天津 天津 联通
当前 IP:221.197.232.211 来自于:中国 天津 天津 联通
可以看到,每次运行的结果得到的代理 IP 都是随机的,而且 IP 所在地域确实是来源于真实手机流量(中国联通)。
当然,上述的代理设置方式实际上是一个相对简洁的设置方式。
实际上上述代码等价于在请求的时候设置了一个额外的 Headers - Proxy Authorization,所以上述代码还可以改写如下:
import requests
import base64
proxy_host = 'cellular.proxy.acedata.cloud'
proxy_port = '30000'
proxy_username = '<8位用户名>'
proxy_password = '<32位密码>'
credentials = base64.b64encode(
f'{proxy_username}:{proxy_password}'.encode()).decode()
proxies = {
'http': f'http://{proxy_host}:{proxy_port}',
'https': f'http://{proxy_host}:{proxy_port}'
}
headers = {
'Proxy-Authorization': f'Basic {credentials}'
}
for _ in range(3):
resp = requests.get('http://myip.ipip.net',
proxies=proxies, headers=headers)
print(resp.text)
可以看到,这里我们通过 Proxy-Authorization 这个请求头额外设置了代理的用户名和密码(需要进行 Base64 编码),这样的代码运行效果也是一样的。
对于其他语言,比如 JavaScript 的 axios,也可以使用类似的设置方式:
const axios = require('axios');
const base64 = require('base64');
const proxy_host = 'cellular.proxy.acedata.cloud';
const proxy_port = '30000';
const proxy_username = '<8位用户名>';
const proxy_password = '<32位密码>';
const credentials = base64.encode(`${proxy_username}:${proxy_password}`);
const proxies = {
http: `http://${proxy_host}:${proxy_port}`,
https: `http://${proxy_host}:${proxy_port}`
};
const headers = {
'Proxy-Authorization': `Basic ${credentials}`
};
for (let i = 0; i < 3; i++) {
axios.get('http://myip.ipip.net', { proxies, headers })
.then(resp => console.log(resp.data))
.catch(err => console.error(err));
}
运行效果都是一样的。
对于其他语言的设置方法,请参考上文自行改写。
购买更多
如您的套餐已经耗尽,您需要购买更多才能继续使用该代理服务。
要购买更多,请到「申请页面」直接点击「购买更多」按钮即可选购,1 Credit 约 17.5 MB,单次购买更多,单价越便宜,如图所示: