01代理用戶名點樣看?
代理用戶名是一串簡短的設定字串,各部分以連字號連接。開頭是 user,之後加上一對對名稱和值,用來設定出口位置及 IP 保持多久。明白各部分後,毋須打開控制台,也可以自己寫出任何連接字串。
country 之後是兩個小楷字母的國家代碼。user-country-us 代表美國 IP,user-country-jp 代表日本 IP。city 之後是小楷的城市名稱,空格改為底線,例如 user-country-us-city-new_york。
session 之後是你自訂的會話名稱。使用 user-country-jp-session-shop1 時,所有用這個名稱的請求會在最長 120 分鐘內保持同一 IP。加上 type-mobile,例如 user-type-mobile-country-gb,就會經流動 IP 出口。
密碼欄一律填以 pt_ 開頭的存取令牌。要改位置或會話,只需修改用戶名,令牌保持不變。
- user 表示設定由此開始。
- country 加兩個字母的代碼用來選國家。
- city 加以底線連接的名稱用來選城市。
- session 加名稱可保持同一 IP。
- type-mobile 用來選流動 IP。
02HTTP 和 SOCKS5 代理,應該用邊個?
做網頁抓取和瀏覽器工作,HTTP 代理是最方便的預設選擇;非網頁流量,或想由代理端解析 DNS 的設定,則適合 SOCKS5 代理。ProxyToo 在同一個網關 gate.proxytoo.com:7000 同時支援兩者。用戶名和令牌不變,只需改地址前面的協議。
HTTP 代理本身就是為網頁請求而設,所以幾乎所有程式庫和瀏覽器都可以直接使用。HTTPS 網站同樣可用,因為代理會為連線建立加密通道。requests、Scrapy、Puppeteer、Playwright 等網頁工具,建議先用 HTTP 格式。
SOCKS5 轉發的是連線本身,所以除網頁外還可以傳送多種流量。在 Python 中,地址以 socks5h 開頭,代理就會在出口國家解析主機名稱,令你的位置保持一致。Chromium 系瀏覽器對帶用戶名的 SOCKS5 支援有限,所以瀏覽器自動化用 HTTP 會更順暢。
- 網頁抓取和瀏覽器自動化用 HTTP
- 會傳送非網頁流量的程式用 SOCKS5
- 想在代理所在國家解析 DNS,用 socks5h 地址
- 兩者用同一組用戶名和令牌
03點樣在瀏覽器或防關聯瀏覽器加入代理?
一般瀏覽器可以打開代理擴充功能,在不同欄位分別輸入主機、端口、用戶名及令牌四個值。在控制台的「生成連接資訊」選擇 host:port:user:pass 格式,四個值會出現在同一行,方便逐欄複製。如果首次載入頁面時彈出驗證視窗,就在那裏輸入用戶名和令牌。
防關聯瀏覽器為每個設定檔提供獨立的瀏覽器環境,所以基本原則是每個設定檔用一個用戶名。在設定檔的代理欄位選擇 HTTP 或 SOCKS5,然後在用戶名加上會話部分,每個設定檔用不同的會話名稱。這樣每個設定檔都有自己的 IP,而同一設定檔內 IP 不會改變。
把設定檔的語言、時區和位置設成所選國家,頁面就會以當地訪客看到的樣子顯示。長時間經營同一帳戶的設定檔,用 ISP 代理或獨享數據中心代理,整個期限都會保持同一 IP。兩者都可以在控制台的「購買產品」選擇數量和期限下單。
- 每個設定檔一個會話名稱
- 語言和時區配合 IP 所在國家
- 長期運行的設定檔用 ISP 代理
- 在驗證視窗輸入用戶名和令牌
04點樣在 Python requests 和 Scrapy 使用代理?
在 Python 中,把代理寫成 http://username:token@gate.proxytoo.com:7000 這樣的一行,再交給程式庫的代理設定。使用 requests 時,關鍵是在 http 和 https 兩個項目都填入同一地址。兩個項目都填好,HTTPS 請求亦會經代理發出。
在 requests 的 Session 物件設定一次代理,該會話內所有請求都會使用。每個請求想換新 IP 時,用只含國家的用戶名;登入這類需要延續的流程,就用帶會話部分的用戶名。如要用 SOCKS5,請為 requests 安裝 SOCKS 附加套件,並把地址開頭改為 socks5h。
在 Scrapy 中,把同樣格式的地址填入每個請求 meta 的 proxy 值,內置的代理中介軟件會自動把用戶名和令牌轉成驗證標頭。想把同一設定套用到所有請求,可以寫一個小型下載中介軟件來填入 proxy 值。想把流量分成多個會話,就讓這個中介軟件為每批請求分配不同的會話名稱。
用 CONCURRENT_REQUESTS 和 DOWNLOAD_DELAY 等設定調整並行數量和節奏。先設低一點,確認回應穩定後再逐步提高,在速度和成功率之間取得平衡。住宅代理按使用流量收費,過濾圖片和字型可以令餘額用得更耐。
05點樣在 Node.js、Puppeteer 和 Playwright 設定代理?
在 Node.js 中,常見做法是建立一個代理 agent,再交給請求程式庫。HTTP 可用 https-proxy-agent 或 undici 的 ProxyAgent 等套件,SOCKS5 則用 socks-proxy-agent,並傳入包含用戶名和令牌的地址。agent 只建立一次並在各請求中重用,連線可以重複使用,速度亦更快。
使用 Puppeteer 時,在 --proxy-server 啟動參數只填網關地址,打開頁面後再用 page.authenticate 另外傳送用戶名和令牌。這樣分開處理,是在 Chrome 中最穩定的設定。要轉換國家或會話,最簡單的方法是用新用戶名啟動另一個瀏覽器。
使用 Playwright 時,在 proxy 啟動選項設定 server、username 和 password,驗證一步完成。password 欄填你的存取令牌。亦可以只啟動一個瀏覽器,為每個 context 分配各自的代理,每個 context 配一個會話名稱,一個程式就可以同時運行多個 IP。
瀏覽器自動化每個頁面都會下載圖片、影片和字型,累積起來流量不少。用請求攔截封鎖不需要的資源,可以減少按 GB 收費的住宅代理和流動代理的開支。加上會話名稱,頁面載入期間 IP 保持穩定,頁面就能完整呈現。
06輪換代理和黏性會話,邊個較適合爬取數據?
每頁獨立讀取的爬取工作,每個請求用新 IP;登入或購物車這類需要延續的流程,就用會話。沒有會話部分時,每個請求都會換 IP;有的話,同一名稱下 IP 保持不變。一個令牌兩樣都做得到,可以按工作的每個步驟選擇。
輪換模式適合頁面之間毫無關聯的工作,例如搜尋結果、產品列表和價格表。請求會平均分散到大量 IP,在網站看來就是許多訪客的普通流量。即使大規模爬取同一網站,拉開請求間隔亦可以保持穩定。
使用會話的竅門,是每個工作單位用獨立的會話名稱。如果要檢查五個網店帳戶,就命名為 shop1 至 shop5,每個帳戶各自保留 IP。把工作拆成可在會話時限內完成的短流程,整個流程都可以用同一個 IP。
如果整個月都需要同一 IP,ISP 代理或獨享數據中心代理最適合;需要大量 IP 又想單價低,共享數據中心代理或 IPv6 代理是不錯的選擇。流量大而國家混合亦無妨的工作,用每日 $37.58 的無限流量住宅代理,成本就容易預算。
- 獨立頁面每個請求換新 IP
- 登入和結帳流程保持同一會話名稱
- 每個工作單位用不同會話名稱
- 整月同一 IP 用 ISP 或獨享數據中心代理
07點樣檢查代理 IP 及處理連線錯誤?
最快的檢查方法,是經代理向顯示 IP 的頁面發送請求,確認 IP 和國家與用戶名中的國家一致。在控制台的「生成連接資訊」選擇 curl 格式,就會得到現成的檢查指令,可直接貼到終端機。如果設定了會話,把同一指令執行兩三次,確認 IP 有否保持。
407 回應代表代理不接受你的憑證,通常是用戶名或令牌中有一個字元出錯。請確認令牌以 pt_ 開頭、複製時沒有夾帶空格或換行,以及用戶名以 user 開頭。如果一行地址中出現特殊字元,把它們作 URL 編碼就能解決。
403 或 429 這類回應來自網站本身,代表代理連線已成功,只是網站在留意請求速度或模式。拉開請求間隔、發送類似瀏覽器的標頭,並由會話改為每個請求換新 IP。
逾時多數是因為公司或學校網絡封鎖了網關端口、城市範圍太窄,或程式碼的逾時設定太短。試試在另一個網絡執行同一指令、移除城市部分只指定國家,並把請求的逾時設定加長。同時確認餘額仍有剩,以及 IP 產品的訂單在「我的訂單」中顯示為「使用中」。
- 407:檢查用戶名和令牌
- 403 或 429:放慢速度並輪換 IP
- 逾時:檢查網絡、城市及逾時設定
- 同一指令執行幾次以測試會話
08點樣保護代理存取令牌?
存取令牌既是帳戶 ID,也是代理密碼,任何人拿到它都可以用你的餘額使用代理。伺服器只保存令牌的雜湊值,所以你在註冊時儲存的令牌檔案就是唯一的正本。請在兩個地方保存副本,並加入密碼管理工具,既安全又容易找到。
不要把令牌寫在程式碼中,改為從環境變數或獨立的設定檔讀取。把該設定檔加入 .gitignore,令它不會進入程式碼庫;在共用伺服器上,收緊檔案權限,只讓自己讀取。這樣就可以分享程式碼,而令牌只留在自己的電腦。
日誌和截圖亦要留意。出錯時印出完整代理地址,令牌就會直接寫入日誌,所以記錄地址時要遮蓋令牌部分。發問或分享截圖時,只顯示用戶名,並先刪去令牌。
- 令牌檔案存放在兩個地方
- 從環境變數讀取令牌
- 設定檔不放入程式碼庫
- 日誌和截圖中遮蓋令牌