
很多人在做電商選品、競品分析或者店鋪裝修的時候都會遇到同一個需求想把某個商品詳情頁里的所有圖片、視頻一次性保存到本地。一個個右鍵另存為不僅效率低而且經(jīng)常漏掉隱藏的細(xì)節(jié)圖和場景圖。這篇文章把我在阿里巴巴、淘寶這類電商平臺上批量下載商品圖片和視頻的實際操作經(jīng)驗整理出來分三條路線講清楚從瀏覽器插件到抓包分析再到腳本化采集你可以按自己的技術(shù)基礎(chǔ)直接選一條用。批量下載這個詞聽起來好像有點灰色其實只要用途正當(dāng)比如備份自有店鋪素材、做設(shè)計參考、整理產(chǎn)品資料完全合理。文章不會鼓勵任何違反平臺規(guī)則或者侵犯版權(quán)的高頻爬取行為所有方法都建立在低頻、合法、克制的原則上。1. 批量下載這件事到底難在哪1.1 電商平臺不希望你批量下載的三個原因淘寶、阿里巴巴以及1688這類平臺商品詳情頁本質(zhì)上是由大量圖片和視頻組成的富媒體內(nèi)容。從頁面結(jié)構(gòu)上看一張商品主圖、五張詳情輪播圖、視頻展示區(qū)、SKU圖、詳情描述圖這些資源分散在不同接口和存儲域名下。你直接保存網(wǎng)頁根本沒法定向拿到高清原圖因為瀏覽器保存下來的只是HTML結(jié)構(gòu)。平臺不希望你輕松批量下載無非三個原因。第一是帶寬和服務(wù)器成本詳情頁的圖片都是動態(tài)加載的大量高頻請求會占用CDN資源第二是防盜鏈機(jī)制很多圖片地址帶有簽名參數(shù)或者Referer校驗直接復(fù)制鏈接打開經(jīng)常報錯第三是版權(quán)保護(hù)意識商家上傳的圖片視頻屬于商業(yè)資產(chǎn)隨意批量復(fù)制確實涉及侵權(quán)風(fēng)險。這三點決定了批量下載不能靠蠻力必須講究策略和節(jié)奏。1.2 三條路線對比每個人都能找到適合自己的方式我先后用過三種方式各自適用不同人群。瀏覽器插件方案適合完全不懂代碼的人選中頁面一鍵抓取五分鐘上手瀏覽器開發(fā)者工具方案適合愿意動腦子的運營人員不需要寫代碼但從Network面板里分析出資源地址后可以用簡單命令或者在線工具下載Python腳本方案適合真正有批量生產(chǎn)需求的人可以做到翻頁、去重、斷點續(xù)傳、自動命名一次跑完上千個商品。三條路線本質(zhì)上解決的是同一個問題如何從復(fù)雜的網(wǎng)頁結(jié)構(gòu)里精準(zhǔn)鎖定圖片和視頻的真實資源地址然后把它們落到本地硬盤。后面你會發(fā)現(xiàn)不管選哪條路線核心邏輯都是找資源地址、構(gòu)造下載請求、保存文件區(qū)別只是自動化程度不一樣。我建議第一次搞的人先走一遍路線A理解整個流程之后再決定要不要往深度走。2. 準(zhǔn)備工作先從一張主圖看起2.1 一張商品圖片是怎么被加載出來的搞清楚批量下載的原理前得先明白一個網(wǎng)頁里圖片和視頻是怎么出現(xiàn)在你面前的。當(dāng)你在瀏覽器輸入商品鏈接頁面先加載HTML骨架然后JavaScript腳本運行去請求一個商品詳情接口拿到結(jié)構(gòu)化數(shù)據(jù)。這個數(shù)據(jù)里包含圖片URL列表、視頻URL、SKU信息等。瀏覽器再把URL指向的圖片渲染到頁面。關(guān)鍵點在這里你看到的圖片地址和真實原圖地址往往不是同一個。詳情頁里經(jīng)常展示的是壓縮后的縮略圖URL中間帶著比如 “_250x250.jpg” 這樣的尺寸標(biāo)記。批量下載想要高清就得多一步處理把尺寸標(biāo)記替換成原圖參數(shù)。有些平臺的原圖地址規(guī)律非常明顯刪掉中間那段就是高清原圖。這個規(guī)律我在后面會詳細(xì)講。2.2 把目標(biāo)范圍說清楚再動手開始下載之前先花一分鐘想清楚你到底要什么。是要一個商品的全部SKU圖還是要一整個列表頁里所有商品的主圖是只要視頻還是圖片視頻都要是只要當(dāng)頁商品還是需要翻5頁、10頁。范圍不同工作量天差地別。以我自己的經(jīng)驗最耗時的不是下載而是整理。如果你批量下載了300張圖但文件名全是時間戳或者無意義字符串找起來等于白干。所以下載前就要規(guī)劃命名規(guī)則比如用“商品ID_序號_用途”這樣的格式。這一步很多人忽略等到下載完才后悔這是批量下載里最隱蔽的坑。2.3 工具選型與瀏覽器環(huán)境準(zhǔn)備環(huán)境準(zhǔn)備不復(fù)雜。瀏覽器我建議用Chrome或者Edge只要它足夠現(xiàn)代能打開開發(fā)者工具就行。如果你走插件路線先確認(rèn)瀏覽器應(yīng)用商店能正常訪問。另外準(zhǔn)備一個專門的文件夾放下載內(nèi)容并且確保磁盤空間充足我遇到過用戶下載到一半磁盤滿了前面的圖全部白下。如果你想用腳本路線電腦上需要裝Python環(huán)境建議3.8以上版本。還需要三個常用庫requests用來發(fā)送HTTP請求BeautifulSoup4或者lxml用來解析HTML正則表達(dá)式庫用來從文本里抽URL。這些庫通過pip命令一鍵安裝不復(fù)雜。還有一點要說清楚就是下載請求里必須帶上正常的User-Agent和Referer字段否則很多平臺會直接拒絕連接。3. 實操路線A瀏覽器插件快速下載3.1 插件選擇要點別只看下載量市面上圖片批量下載類插件很多但電商平臺場景下真正好用的不多。選擇時重點看三個能力第一能不能識別懶加載圖片?,F(xiàn)在詳情頁圖片很多是滾動到可見區(qū)域才加載普通插件只能抓到首屏那幾張等于半殘。第二能不能過濾視頻和圖片或者至少清晰分類。第三能不能自定義文件名前綴和目錄規(guī)則。我實測下來功能關(guān)鍵詞可以搜“圖片批量下載”“image downloader”裝那種支持正則過濾、圖片尺寸過濾的。這類插件會把當(dāng)前頁面里所有圖片資源列出來你直接勾選需要的就行。如果你對某個插件不熟先拿一個商品詳情頁做測試看看抓到的是不是原始清晰度圖片再做決定。3.2 五步抓取流程實錄第一步打開目標(biāo)商品詳情頁等頁面所有內(nèi)容加載完畢。第二步點擊插件圖標(biāo)插件會自動掃描當(dāng)前頁面的IMG標(biāo)簽和背景圖。第三步在插件面板里按圖片尺寸排序優(yōu)先找寬高超過800像素的那些這通常是詳情大圖。第四步勾選需要的圖片設(shè)置文件名前綴比如“鞋類A款”。第五步點擊下載插件會觸發(fā)瀏覽器的多文件下載能力。這里面有個細(xì)節(jié)容易被坑插件默認(rèn)抓到的圖片可能包含圖標(biāo)、頭像、功能按鈕等無關(guān)資源。所以你需要在插件面板里篩選URL只保留域名指向圖片存儲域名的鏈接。圖片存儲域名通常和頁面域名不同它可能是一串類似 “ae01.alicdn.com” 或 “img.alicdn.com” 的地址。遇到這類域名放心勾選。注意插件方式下載視頻支持不太好。如果你需要視頻建議直接跳到后面的開發(fā)者工具路線。3.3 商品視頻下載與封面提取視頻在HTML里通常不是直接的MP4標(biāo)簽而是一個嵌套的播放器容器。插件要抓到視頻鏈接得先識別video標(biāo)簽得source子標(biāo)簽或者播放器初始化時加載的配置文件。如果你用的插件能列出所有媒體資源你會在面板里看到類似“blob:https://...”的地址這種地址是瀏覽器內(nèi)存流不能直接下載。我常用的替代方案是在詳情頁右鍵點擊視頻區(qū)域選擇“檢查然后在開發(fā)者工具的Network面板里刷新頁面按media過濾請求。這樣你能看到真正的視頻文件請求通常以.mp4結(jié)尾。右鍵這個請求選擇open in new tab就能直接另存為。這個操作不依賴插件一次只能下一條視頻但勝在簡單可靠。4. 實操路線B開發(fā)者工具手把手完成一次抓包4.1 Network面板怎么用瀏覽器開發(fā)者工具是批量下載的照妖鏡所有資源請求都在這里現(xiàn)出原形。按F12打開開發(fā)者工具切到Network選項卡然后刷新商品詳情頁。你會看到頁面發(fā)起幾十甚至上百個請求類型包括document、script、xhr、img、media等。要讓列表更清晰可以在篩選框里輸入關(guān)鍵字。比如圖片資源的域名里通常帶著“img”視頻資源帶著“mp4”或“video”。點擊每一行請求右側(cè)能查看響應(yīng)頭、預(yù)覽和實際內(nèi)容。通過響應(yīng)內(nèi)容的格式你能快速判斷這個請求是頁面數(shù)據(jù)接口還是圖片文件本身。這個界面就是你解剖整個商品頁資源結(jié)構(gòu)的手術(shù)臺。4.2 從Response里過濾出真實圖片地址當(dāng)你找到一個XHR請求它的響應(yīng)內(nèi)容是JSON格式時多半就是商品詳情接口。在Preview標(biāo)簽頁里展開數(shù)據(jù)結(jié)構(gòu)你會看到類似 imageList、videoList這樣的字段。有些接口的字段名是代碼風(fēng)格比如 “itemPropMainImgMap”不要害怕逐個展開發(fā)現(xiàn)URL字符串基本就是資源地址。電商平臺經(jīng)常做地址加密比如給URL加點簽名參數(shù)t162xxx。這個參數(shù)是防止外部直接引用的。你在瀏覽器開發(fā)者工具里看到的是完整可訪問地址但直接拿去用有時會超時。處理辦法很簡單把下載請求的Referer頭設(shè)置為商品詳情頁地址多半能解決。4.3 從列表頁批量提取全套地址單個詳情頁解決了還談不上批量。真正的批量在列表頁翻頁階段。比如你想采集某店鋪的所有商品主圖先在列表頁打開開發(fā)者工具分析列表頁接口規(guī)律。通常翻頁就是切換查詢參數(shù)里的頁碼字段比如 “page2”。你只需要在Network面板找到列表頁接口觀察頁碼參數(shù)的變化然后把參數(shù)替換成1到N逐個請求這些接口就能拿到所有商品的ID和主圖地址。這個階段的整理工作很關(guān)鍵。建議在Excel里建兩列一列商品ID一列主圖URL。后面下載時用ID做文件名前綴一眼就知道圖屬于哪個商品。我用這個辦法做過一個店鋪近千款商品的圖片梳理四十分鐘內(nèi)全部搞定比人工操作快了幾十倍。5. 實操路線C腳本化批量采集的完整思路5.1 三層結(jié)構(gòu)請求、解析、下載如果你有信心用Python可以考慮把整個流程腳本化。腳本建議拆成三層請求層負(fù)責(zé)構(gòu)造請求、處理反爬解析層負(fù)責(zé)從響應(yīng)里提取URL列表和文件名下載層負(fù)責(zé)多線程或隊列下載、斷點續(xù)傳、重試。請求層最核心的是會話對象。用requests.Session()保持登錄態(tài)把瀏覽器里復(fù)制的Cookie、User-Agent、Referer配置進(jìn)去。很多電商接口要求登錄后才有完整詳情數(shù)據(jù)所以先用瀏覽器登錄再把Cookie復(fù)制到腳本里是最快的方案。解析層不需要太復(fù)雜。商品詳情接口如果是JSON直接用json庫解析如果是HTML用BeautifulSoup解析IMG標(biāo)簽和video標(biāo)簽。提取到的URL建議先存成文本文件每行一個最后統(tǒng)一由下載層處理。把提取和下載解耦的好處是你可以在下載前檢查一遍URL清單把不相關(guān)資源剔除避免下一堆垃圾。5.2 命名規(guī)則與去重設(shè)計腳本化之后最大的工作量反而在文件管理。我強(qiáng)烈建議在代碼里就對文件名做規(guī)則化處理。規(guī)則可以這樣商品ID用正則從URL里抽取圖片序號按出現(xiàn)順序遞增再加一個用途標(biāo)簽。最終名字類似“A12345_01_main.jpg”“A12345_02_detail.jpg”。這樣的文件整理進(jìn)文件夾后不需要打開預(yù)覽就能秒懂內(nèi)容歸屬。去重同樣重要。同一個商品圖片可能在不同頁面重復(fù)出現(xiàn)如果不做去重下載完會多出一大堆沒用的副本。推薦對URL做MD5哈希把哈希值存進(jìn)一個集合下載前先檢查集合里是否已存在。這個做法實現(xiàn)成本極低但對磁盤空間和后續(xù)整理效率的提升立竿見影。5.3 限速、重試與斷點續(xù)傳腳本采集最怕的是一腔熱情跑起來結(jié)果賬號被封或者IP被限制。應(yīng)對策略是限速。最簡單粗暴的辦法是在循環(huán)里加上time.sleep(2)每次請求間隔兩秒以上。更成熟的做法是使用隨機(jī)間隔比如每次等1到3秒模擬人的操作節(jié)奏。有經(jīng)驗的采集者還會在代碼里檢測響應(yīng)狀態(tài)碼一旦遇到頻繁的429或者403狀態(tài)就自動停止等待一段時間再繼續(xù)。下載層建議用downloader庫或者requests的stream模式。streamTrue時可以先查Content-Length然后按chunk寫文件這樣即使網(wǎng)絡(luò)斷了也能從斷點繼續(xù)。重試機(jī)制建議做三次第一次失敗等待5秒重試第二次失敗等待30秒第三次失敗就跳過并把URL記錄到error.log文件里。跑完腳本后檢查這個日志文件單獨處理異常項。注意批量腳本只適用于個人合法場景比如備份自有店鋪素材或者獲取已獲得授權(quán)的資料。未經(jīng)授權(quán)的高頻抓取別人店鋪內(nèi)容是不合適的平臺方有權(quán)根據(jù)服務(wù)協(xié)議采取限制措施。6. 常見問題與排查技巧實錄6.1 圖片抓不全只有首屏幾張這幾乎是懶加載導(dǎo)致的最典型問題。詳情頁圖片在頁面未滾動到對應(yīng)區(qū)域時不會發(fā)起請求所以插件和腳本只能看到前幾張。解決辦法有三個頁面打開后模擬滾動把滾動條從頂部逐步拉到底部觸發(fā)全部圖片加載直接找頁面的數(shù)據(jù)接口繞過懶加載邏輯在Network面板里找圖片域名下的所有XHR請求從中提取URL。我處理這個問題時最常用的是第二種方法。頁面數(shù)據(jù)接口一次返回所有圖片地址與頁面是否滾動無關(guān)。所以遇到抓不全時先別急著改代碼回到Network面板找找有沒有一個JSON返回了完整列表。這個JSON通常名稱里包含“detail”或者“item”關(guān)鍵字。6.2 視頻下載后打不開或只有聲音商品詳情頁的視頻有兩種常見格式。一種是完整MP4文件另一種是HLS流媒體格式。HLS格式用M3U8索引文件引用多個TS分片如果你用常規(guī)下載手段只保存了一個TS分片播放器就會報錯或者畫面卡住。遇到m3u8結(jié)尾的地址需要用專門的下載工具把分片合并成完整MP4。判斷方法很簡單看URL后綴是.mp4還是.m3u8。m3u8需要用支持HLS協(xié)議的下載器很多視頻下載工具都內(nèi)置了這個能力。另外有些平臺視頻分標(biāo)清和高清兩個地址接口返回的是一個視頻列表需要根據(jù)清晰度參數(shù)挑選。默認(rèn)取第一個往往不是清晰度最高的得多看一眼。6.3 頻繁請求導(dǎo)致驗證碼和IP限制做過采集的人對驗證碼都不陌生。出現(xiàn)驗證碼說明行為頻率已經(jīng)引起風(fēng)控。我個人的經(jīng)驗是遇到驗證碼不要想著繞過而是停下來調(diào)整策略。先停一小時把請求間隔從2秒提高到10秒再測試是否恢復(fù)。如果仍然觸發(fā)說明對方的限制條件更嚴(yán)格建議降低到每天固定數(shù)量分批次完成。還有一個容易忽略的點同一個網(wǎng)絡(luò)出口下多臺設(shè)備同時采集風(fēng)險會疊加。如果你在一個辦公網(wǎng)里操作注意協(xié)調(diào)其他人避免大家一起觸發(fā)反爬。被限制后也不要嘗試用多個賬號輪換躲避檢測這種操作明顯違反平臺規(guī)則不在討論范圍內(nèi)。7. 一些值得記住的個人心得整個批量下載過程說到底是一場關(guān)于資源定位的博弈。你不需要成為黑客只需要理解網(wǎng)頁資源加載的基本邏輯知道圖片和視頻最終一定來自某個可請求的地址然后用合適的工具把它拿下來。插件適合應(yīng)急抓包適合理解原理腳本適合真正高頻復(fù)用的場景。我在實操中最深的體會是永遠(yuǎn)先手工完成一個商品的全流程再談批量。手工走一遍你能發(fā)現(xiàn)圖片是不是高清、視頻能不能播放、命名規(guī)則合不合理、目錄結(jié)構(gòu)好不好用。這些細(xì)節(jié)一旦在批量階段暴露返工成本非常高。我見過好幾個人滿懷信心跑完腳本最后面對5000個亂碼文件名欲哭無淚。最后一個小技巧批量下載前先下載一張圖觀察它的字節(jié)大小。如果只有幾KB到十幾KB說明拿到的是縮略圖趕緊回去研究原圖地址規(guī)則。高清原圖通常在100KB以上這個簡單的判斷能幫你省下大量時間。先保證質(zhì)量再追求數(shù)量批量下載才能真正為你創(chuàng)造價值。