跳轉到主要內容
在爬蟲與反爬蟲鬥爭愈演愈烈的情況下,各大網站和 App 的風控檢測越來越強,其中一項就是 IP 封禁。 為了解決 IP 封禁的困擾,一個有效的方式就是設置代理,設置代理之後,爬蟲可以借助代理的 IP 來偽裝自己的真實 IP 地址,從而突破反爬蟲的限制。 但代理的質量有高有低,比如市面上的免費代理,幾乎絕大多數都是不可用或者被封禁的狀態,而有些付費普通代理也陸續被加入了各大網站和 App 的風控黑名單。因此,現在可以用作高質量數據爬取的代理越來越少了,目前市面上質量較高的代理主要有獨享代理、ADSL 代理、移動蜂窩代理這幾種類型。 本代理服務就是基於移動蜂窩網絡(4G、5G)的輪換代理服務,本文檔會介紹此服務的申請和使用方法。

移動蜂窩代理

移動蜂窩代理,其實就是基於手機流量搭建的代理服務,所有的代理 IP 都是手機真實的 IP。此種代理在爬蟲領域使用相對較少,因此被封禁的概率也更小,所以此種代理對於爬取一些風控極強的網站和 App 的爬取有很好的效果。 本代理服務背後是基於一個大規模的群控手機池搭建的代理服務,所有流量都經由純正的手機流量轉發,支持市面上幾乎所有網站和 App 的數據請求,代理質量極高,能夠極大減小風控概率。

申請方法

要使用蜂窩代理服務,可以首先到「申請頁面」進行申請,首次申請有 1 積分免費額度。 如果您尚未登錄,則會自動跳轉到登錄頁面,登錄之後繼續申請即可。

使用方法

申請完畢之後,可以到「控制台」中查看本人的申請結果,如圖所示: 點擊 「Credentials」,即可查看使用蜂窩代理服務的用戶名及密碼,以冒號分隔,其中用戶名是 8 位,密碼是 32 位,如圖所示: 本移動蜂窩代理是一種輪換代理,因此使用的時候只需要設置一個固定的代理地址和端口即可,代理的地址和端口分別是 cellular.proxy.acedata.cloud 和 30000,本代理是 HTTP/HTTPS/SOCKS 協議的代理,可以用於請求 HTTP 和 HTTPS 協議的網站。

命令測試

有了代理的用戶名密碼之後,最方便的方法便是通過 curl 命令行進行測試,如尚未安裝,請參考 https://curl.se/ 安裝即可。 假如當前代理的用戶名密碼是 1f78266a:eff0896726224fa2a99fe82dd1f07562,我們可以用如下 curl 命令進行測試:
curl -x 1f78266a:eff0896726224fa2a99fe82dd1f07562@cellular.proxy.acedata.cloud:30000 https://ipinfo.io
這裡我們使用 curl 的 -x 參數指定了代理地址,代理協議默認是 HTTP/HTTPS,這裡請求的 URL 是 https://ipinfo.io,這個站點可以返回請求該站點的真實 IP 地址和 IP 所在地域。
注意:上述用戶名密碼可能無效,請自行替換成你的用戶名密碼。
運行結果如下:
{
  "ip": "39.144.10.182",
  "city": "Shanghai",
  "region": "Shanghai",
  "country": "CN",
  "loc": "31.2222,121.4581",
  "org": "AS9808 China Mobile Communications Group Co., Ltd.",
  "postal": "200000",
  "timezone": "Asia/Shanghai",
  "readme": "https://ipinfo.io/missingauth"
}
可以看到,返回結果的 country 是 CN,代表中國,org 是 China Mobile,代表中國移動網絡,確實是蜂窩代理出口。 如果再次運行,可以得到不一樣的結果,每次請求都是隨機的 IP 出口。

代碼對接

下面以 Python 為例演示該蜂窩輪換代理的設置方法:
import requests

proxy = 'http://{proxy_username}:{proxy_password}@cellular.proxy.acedata.cloud:30000'

proxies = {
    'http': proxy,
    'https': proxy
}

for _ in range(3):
    resp = requests.get('https://ipinfo.io', proxies=proxies)
    print(resp.text)

這裡我們首先聲明了代理的 URL 並定義為 proxy 變量,協議是 http 協議,後面跟隨輪換代理的用戶名和密碼(即控制台展示的用戶名和密碼,二者以冒號分隔),後面再跟一個 @ 符號,再跟代理的地址和端口即可。 接著聲明了一個 proxies 變量,配置了兩個鍵值對,鍵名分別為 http 和 https,其鍵值都是 proxy,代表對於 HTTP 和 HTTPS 協議的網站,都是用 proxy 變量定義的代理來進行請求。 接下來定義了三次循環進行代理的測試,這裡請求的 URL 是 https://ipinfo.io,這個站點可以返回請求該站點的真實 IP 地址和 IP 所在地域。 運行結果如下:
{
  "ip": "39.144.18.26",
  "city": "上海",
  "region": "上海",
  "country": "CN",
  "loc": "31.2222,121.4581",
  "org": "AS9808 中华移动通信集团有限公司",
  "postal": "200000",
  "timezone": "亚洲/上海",
  "readme": "https://ipinfo.io/missingauth"
}
{
  "ip": "39.144.18.26",
  "city": "上海",
  "region": "上海",
  "country": "CN",
  "loc": "31.2222,121.4581",
  "org": "AS9808 中华移动通信集团有限公司",
  "postal": "200000",
  "timezone": "亚洲/上海",
  "readme": "https://ipinfo.io/missingauth"
}
{
  "ip": "39.144.182.55",
  "city": "湛江",
  "region": "广东",
  "country": "CN",
  "loc": "21.2339,110.3875",
  "org": "AS24445 河南移动通信有限公司",
  "postal": "524000",
  "timezone": "亚洲/上海",
  "readme": "https://ipinfo.io/missingauth"
}
可以看到,每次运行的结果得到的代理 IP 都是随机的,而且 IP 所在地域确实是来源于真实手机流量。 当然,上述的代理设置方式实际上是一个相对简洁的设置方式。 实际上上述代码等价于在请求的时候设置了一个额外的 Headers - Proxy Authorization,所以上述代码还可以改写如下:
import requests
import base64

proxy_host = 'cellular.proxy.acedata.cloud'
proxy_port = '30000'
proxy_username = '{proxy_username}' # 8位用户名
proxy_password = '{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('https://ipinfo.io',
                        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 = "{proxy_username}"; // 8位用户名
const proxy_password = "{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("https://ipinfo.io", { proxies, headers })
    .then((resp) => console.log(resp.data))
    .catch((err) => console.error(err));
}
运行效果都是一样的。 对于其他语言的设置方法,请参考上文自行改写。

购买更多

如您的套餐已经耗尽,您需要购买更多才能继续使用该代理服务。 要购买更多,请到「申请页面」直接点击「购买更多」按钮即可选购,单次购买更多,单价越便宜。