Temu 實時獲取商品動態:一個踩坑后修好的抓數腳本筆記

爬蟲代理

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() 一下的事,但現實平臺做了很多“隱形防護”。能否順利拿到數據,取決于你是否愿意細心模擬出“人”的訪問痕跡。

如果你也在做類似的事情,不妨參考我的踩坑歷程

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/88185.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/88185.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/88185.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【軟考高級系統架構論文】論數據分片技術及其應用

論文真題 數據分片就是按照一定的規則,將數據集劃分成相互獨立、 正交的數據子集,然后將數據子集分布到不同的節點上。通過設計合理的數據分片規則,可將系統中的數據分布在不同的物理數據庫中,達到提升應用系統數據處理速度的目的。 請圍繞“論數據分片技術及其應用”論題…

VR飛奪瀘定橋沉浸式歷史再現?

當你戴上 VR 設備開啟這場震撼人心的 VR 飛奪瀘定橋體驗,瞬間就會被拉回到 1935 年那個戰火紛飛的 VR 飛奪瀘定橋的歲月,置身于瀘定橋的西岸 。映入眼簾的是一座由 13 根鐵索組成的瀘定橋,它橫跨在波濤洶涌的大渡河上,橋下江水咆哮…

libwebsockets編譯

#安裝 libwebsocket git clone https://github.com/warmcat/libwebsockets && \ mkdir libwebsockets/build && cd libwebsockets/build && \ cmake -DMAKE_INSTALL_PREFIX:PATH/usr -DCMAKE_C_FLAGS"-fpic" .. && \ make &&…

使用docker部署epg節目單,同時管理自己的直播源

配置 Docker 環境 拉取鏡像并運行: docker run -d \--name php-epg \-v /etc/epg:/htdocs/data \-p 5678:80 \--restart unless-stopped \taksss/php-epg:latest 默認數據目錄為 /etc/epg ,根據需要自行修改 默認端口為 5678 ,根據需要自行修…

H5新增屬性

? 一、表單相關新增屬性&#xff08;Form Attributes&#xff09; 這些屬性增強了表單功能&#xff0c;提升用戶體驗和前端驗證能力。 1. placeholder 描述&#xff1a;在輸入框為空時顯示提示文本。示例&#xff1a; <input type"text" placeholder"請輸…

【C++】簡單學——引用

引用的概念 為一個變量指定一個別名 引用的規則 用之前要初始化使用了之后就不能修改指向了&#xff08;對一個引用賦值實際上是對原本被引用的那個值進行賦值&#xff0c;而不是改變指向&#xff09;一個對象可以同時有多個引用 問&#xff1a;引用可以完全代替指針嗎&…

C#編程與1200PLC S7通信

讀取q0.0的狀態,i0.0的狀態實時在窗口更新 PLC里寫一個程序 用常閉按鈕接i0.0信號 &#xff0c;延時接通Q0.0 按按鈕&#xff0c;上位機測試效果, 2396fcfa823aa951d 程序前提是引用了S7通信文件 using Sharp7; using System; using System.Collections.Generic; using S…

el-table復選框分頁多選

場景&#xff1a; 你想要對el-table表格數據進行批量處理&#xff0c;會使用復選框&#xff0c;但如果表格的數據是分頁請求回來的&#xff0c;則在切換頁碼的時候&#xff0c;之前選中的數據會被清空掉&#xff0c;本文就是為了解決這個問題。 解決思路&#xff1a; 主要分…

大IPD之——學習華為的市場隊伍建設(二十)

企業要生存&#xff0c;就必須要擁有自己的核心競爭力。這樣在行業內與其他企業競爭時&#xff0c;才能立于不敗之地&#xff0c;而伴隨著企業的市場化&#xff0c;市場機制對企業價值創造的影響力越來越大。30多年來&#xff0c;華為高度重視市場隊伍與市場能力建設&#xff0…

Datawhlale_快樂學習大模型_task02_NLP 基礎概念

書籍地址 簡要總結一下個人理解 文章目錄 1.1 NLP1.2 發展歷程1.3 NLP任務1.3.1 中文分詞1.3.2 子詞切分1.3.3 詞性標注1.3.4 文本分類1.3.5 實體識別1.3.6 關系抽取1.3.7 文本摘要1.3.8 機器翻譯1.3.9 自動問答 1.4 文本表示的發展1.4.1 詞向量1.4.2 語言模型1.4.3 Word2Vec…

AUTOSAR圖解==>AUTOSAR_AP_SWS_Persistency

AUTOSAR 持久化功能集群解析 1. 引言 AUTOSAR (AUTomotive Open System ARchitecture) 適配平臺中的持久化功能集群(Persistency Functional Cluster)是一個核心組件&#xff0c;為應用程序提供數據持久化服務。本文檔詳細分析了AUTOSAR持久化功能集群的架構、主要組件和工作…

Ollama常用命令詳解:本地大語言模型管理指南

前言 Ollama是一個強大的本地大語言模型管理工具&#xff0c;讓我們可以輕松地在本地部署和運行各種開源大模型。本文將詳細介紹Ollama的核心命令使用方法&#xff0c;幫助您快速上手本地AI模型的管理和使用。 1. 查看已安裝模型 - ollama list 基本用法 ollama list功能說…

[免費]SpringBoot+Vue共享單車信息系統【論文+源碼+SQL腳本】

大家好&#xff0c;我是java1234_小鋒老師&#xff0c;看到一個不錯的SpringBootVue共享單車信息系統【論文源碼SQL腳本】&#xff0c;分享下哈。 項目視頻演示 【免費】SpringBootVue共享單車信息系統 Java畢業設計_嗶哩嗶哩_bilibili 項目介紹 快速發展的社會中&#xff…

內網提權-DC-3靶場實驗(Ubantu16.04)

靶場地址 https://download.vulnhub.com/dc/DC-3-2.zip 打開DC-3 使用kali掃描獲取靶場ip 目錄掃描獲取后臺地址 弱口令admin/snoopy進入后臺 此處可寫入一句話木馬 創建文件寫入一句話木馬 哥斯拉上線 使用lsb_release -a命令查看內核版本 方法一 使用ubuntu漏洞庫發現該…

Nginx:互斥鎖 accept_mutex配置

如何配置 Nginx 的互斥鎖 accept_mutex 1. 理解 accept_mutex 的作用 accept_mutex 是 Nginx 用于控制多工作進程&#xff08;worker processes&#xff09;接收新連接時避免「驚群問題&#xff08;Thundering Herd&#xff09;」的機制。 啟用時&#xff08;accept_mutex o…

aws(學習筆記第四十六課) codepipeline-build-deploy

文章目錄 aws(學習筆記第四十六課) codepipeline-build-deploy學習內容:1. 代碼鏈接及整體架構1.1 代碼鏈接1.2 整體架構1.2.1 初始化階段的`codecommit repo`以及`codebuild project`設定1.2.2 創建`vpc`,`public alb`,`alb listener`以及`fargate service`等1.2.3 創建`so…

Vue 項目中的組件職責劃分評審與組件設計規范制定

在現代前端系統中&#xff0c;Vue&#xff08;無論是 2.x 還是 3.x&#xff09;提供了良好的組件化機制&#xff0c;為構建復雜交互系統打下了基礎。然而&#xff0c;隨著項目規模增長&#xff0c;組件職責不清、代碼重疊、維護困難等問題頻發&#xff0c;嚴重影響開發效率與可…

react 的過渡動畫

一、React的過渡動畫 1、react-transition-group 在開發中&#xff0c;我們想要給一個組件的顯示和消失&#xff0c;添加某種過渡動畫&#xff0c;可以很好的增加用戶體驗&#xff0c; React社區為我們提供了react-transition-group用來完成過渡動畫&#xff0c; React曾為…

深度學習:PyTorch人工神經網絡優化方法分享(1)

本文目錄&#xff1a; 一、從梯度角度入手&#xff08;一&#xff09;梯度下降算法回顧&#xff08;二&#xff09;常用優化算法1.SGD&#xff08;Stochastic Gradient Descent&#xff09;- 隨機梯度下降2.BGD (Batch Gradient Descent) - 批量梯度下降3.MBGD (Mini-Batch Gra…

(三)yolov5——模型訓練

一、準備數據 先準備一個MP4的視頻 1.測試一幀 使用opencv來提取每一個視頻的幀 先使用以下代碼查看一幀的內容&#xff0c;是否符合預期 import cv2 import matplotlib.pyplot as plt# 打開視頻文件 video cv2.VideoCapture("111.mp4") # 讀取一幀 ret, frame…