Temu 作為一個增長迅猛的購物平臺,其商品價格、庫存等信息,對許多做運營分析的小伙伴來說非常有參考價值。
我在寫這個小工具的時候,踩了很多坑,特別記錄下來,希望對你有用。
初版代碼:想當然的“直接來一下”
不少人第一反應是用 Python 的網絡請求模塊直接拉接口,比如我一開始就這么寫了:
import requestslink = "https://www.temu.com/api/product/detail?product_id=1234567890"
r = requests.get(link)
print(r.json())
出現什么問題?
- 請求基本秒掛;
- 直接提示
403 Forbidden
; - 甚至會出現跳登錄頁面的情況;
- 本地運行幾次后就一直 timeout。
顯然,Temu 在外層設了一些機制,并不歡迎“這種訪問方式”。
第一步修復:補充一些“模擬環境”
從瀏覽器 F12 工具里找了下真實請求,發現有幾個關鍵要素必須補上,包括“訪問者標識”、“來源頁面”、“身份憑證”。
import requestslink = "https://www.temu.com/api/product/detail?product_id=1234567890"req_headers = {"User-Agent": "Mozilla/5.0 ... Safari/537.36","Referer": "https://www.temu.com/","Accept": "application/json",
}req_cookies = {"xxx": "瀏覽器里抓到的值"
}r = requests.get(link, headers=req_headers, cookies=req_cookies)
print(r.json())
結果:可以拉到一部分數據了,但頻繁執行還是不穩定。
第二步修復:換一個“網絡通道”
Temu 有一定的訪問頻率限制,如果請求太頻繁或者來自單一入口,還是容易被“關注”。于是我引入了一個中轉方案 —— 把訪問流量走一個中間服務,這樣可以稍微“模糊一下身份”。
假設你有一個類似下面的中間配置項(具體請自己按需處理,別亂用):
#爬蟲代理配置(參考億牛云爬蟲代理 www.16yun.cn)
proxy_host = "proxy.16yun.cn"
proxy_port = "50000"
proxy_user = "16YUN"
proxy_pwd = "16IP"
那么就可以配置網絡入口方式為:
proxies = {"http": f"http://{proxy_user}:{proxy_pwd}@{proxy_host}:{proxy_port}","https": f"http://{proxy_user}:{proxy_pwd}@{proxy_host}:{proxy_port}",
}
然后把這個加進請求里:
r = requests.get(link, headers=req_headers, cookies=req_cookies, proxies=proxies, timeout=10)
此時就穩定多了,可以較高頻率獲取目標信息。
數據保存與動態監測
我希望能夠按時間記錄每次獲取到的價格,于是加了一段簡單的存儲邏輯,用 CSV 寫入:
import csv
from datetime import datetimedef record_price(pid, price_val):with open("temu_trace.csv", "a", newline="") as f:writer = csv.writer(f)writer.writerow([pid, price_val, datetime.now().strftime("%Y-%m-%d %H:%M:%S")])
調用方式如下:
product_id = "1234567890"
price = r.json().get("product_info", {}).get("price")
record_price(product_id, price)
總結:踩過的雷,留個記號
問題表現 | 背后原因 | 修復建議 |
---|---|---|
請求無響應/403 | 請求太“裸” | 加 headers + cookies 模擬瀏覽器 |
請求頻繁后被攔 | 流量識別機制觸發 | 設置中轉訪問(代理入口) |
報錯中斷運行 | 異常未處理 | 加 try-except 保底容錯 |
后記
很多人以為“寫個腳本”就是 get()
一下的事,但現實平臺做了很多“隱形防護”。能否順利拿到數據,取決于你是否愿意細心模擬出“人”的訪問痕跡。
如果你也在做類似的事情,不妨參考我的踩坑歷程