引言
很多开发者在问:“支持1688商品下载的软件”“有没有软件可以同时抓取淘宝天猫拼多多抖音电商的无水印图和视频?”
做跨平台电商的朋友需要从多个平台采集素材。传统爬虫需要为每个平台单独写解析规则,维护成本极高。
本文将解析浏览器方案如何一套代码适配所有平台,实现图片视频通用采集。
一、多平台采集技术架构
text
┌─────────────────────────────────────────────────────────────────────────────┐ │ 多平台通用采集技术架构 │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ 统一接口层 │ │ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ │ │ UniversalCollector │ │ │ │ │ │ collect(url) → { images, videos, title } │ │ │ │ │ └─────────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ 浏览器内核层 │ │ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ │ │ Chromium + CEF │ │ │ │ │ │ 统一渲染所有平台,无需区分解析规则 │ │ │ │ │ └─────────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ ┌─────────────────────────────────────────────────────────────────────┐ │ │ │ 通用处理层 │ │ │ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ │ │ │ │ 原图转换 │ │ SKU识别 │ │ 视频嗅探 │ │ 自动分类 │ │ │ │ │ │ 通用函数 │ │ 通用算法 │ │ 通用函数 │ │ 通用算法 │ │ │ │ │ └───────────┘ └───────────┘ └───────────┘ └───────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘二、通用图片提取器
javascript
// universal_image_extractor.js (function() { 'use strict'; class UniversalImageExtractor { // 通用原图URL转换 getOriginalUrl(url) { if (!url) return null; if (url.startsWith('data:')) return null; if (url.includes('1x1') || url.includes('blank')) return null; // 淘宝/天猫:去除尺寸后缀 url = url.replace(/_\d+x\d+\./g, '.'); url = url.replace(/\.sum\./g, '.'); // 京东:去除缩略图参数 url = url.replace(/!q\d+\.jpg$/, '.jpg'); url = url.replace(/\.n\.jpg/, '.jpg'); // 拼多多:webp转jpg url = url.replace(/\.webp$/, '.jpg'); // 去除所有URL参数 url = url.split('?')[0]; return url; } // 提取所有图片 extractAll() { const images = { main: [], sku: [], detail: [] }; // 基于尺寸和位置的智能分类 const allImgs = document.querySelectorAll('img'); const imgData = []; allImgs.forEach(img => { let url = img.src || img.getAttribute('data-src') || img.getAttribute('data-original'); if (!url) return; url = this.getOriginalUrl(url); if (!url) return; const width = img.naturalWidth || img.width || 0; const parentClass = img.parentElement?.className || ''; imgData.push({ url, width, parentClass, img }); }); // 去重 const seen = new Set(); const uniqueImages = imgData.filter(img => { if (seen.has(img.url)) return false; seen.add(img.url); return true; }); // 分类:宽图为主图,小图为SKU图,其余为详情图 uniqueImages.forEach(img => { if (img.width >= 400) { images.main.push(img.url); } else if (img.width <= 150 || img.parentClass.includes('sku')) { images.sku.push(img.url); } else { images.detail.push(img.url); } }); return images; } } const extractor = new UniversalImageExtractor(); return extractor.extractAll(); })();三、通用视频提取器
javascript
// universal_video_extractor.js (function() { 'use strict'; class UniversalVideoExtractor { extract() { // 方法1:video标签 const video = document.querySelector('video'); if (video && video.src) { return { url: video.src, type: this._detectType(video.src) }; } // 方法2:source标签 const source = document.querySelector('video source'); if (source && source.src) { return { url: source.src, type: this._detectType(source.src) }; } // 方法3:页面数据(淘宝/京东/拼多多通用) const patterns = [ /videoUrl["']?\s*[=:]\s*["']([^"']+\.(?:mp4|m3u8))["']/i, /video_url["']?\s*[=:]\s*["']([^"']+\.(?:mp4|m3u8))["']/i, /"url"\s*:\s*"([^"]+\.(?:mp4|m3u8))"/i ]; const html = document.documentElement.innerHTML; for (const pattern of patterns) { const match = html.match(pattern); if (match) { return { url: match[1], type: this._detectType(match[1]) }; } } return null; } _detectType(url) { if (url.endsWith('.mp4')) return 'mp4'; if (url.endsWith('.m3u8')) return 'm3u8'; return 'unknown'; } } const extractor = new UniversalVideoExtractor(); return extractor.extract(); })();四、平台登录态管理
cpp
class MultiPlatformAuth { public: void Login(const std::string& platform) { if (platform == "taobao") { browser_->GetMainFrame()->LoadURL("https://login.taobao.com"); } else if (platform == "jd") { browser_->GetMainFrame()->LoadURL("https://passport.jd.com"); } else if (platform == "pdd") { browser_->GetMainFrame()->LoadURL("https://mms.pinduoduo.com"); } else if (platform == "1688") { browser_->GetMainFrame()->LoadURL("https://login.1688.com"); } // 用户手动登录,Cookie自动保存 // 后续所有平台请求自动携带对应Cookie } void LoadProduct(const std::string& url) { // 自动携带已保存的Cookie browser_->GetMainFrame()->LoadURL(url); } };五、多平台支持列表
| 平台 | 图片 | 视频 | SKU图 | 备注 |
|---|---|---|---|---|
| 淘宝 | ✅ | ✅ | ✅ | 原图 |
| 天猫 | ✅ | ✅ | ✅ | 原图 |
| 京东 | ✅ | ✅ | ✅ | 原图 |
| 拼多多 | ✅ | ✅ | ✅ | webp转jpg |
| 1688 | ✅ | ⚠️ | ✅ | 需登录 |
| 抖音 | ✅ | ✅ | ⚠️ | 商品视频 |
| 亚马逊 | ✅ | ✅ | ❌ | 原图 |
六、图片质量说明
重要:一键存图下载的是电商平台的原图、原尺寸、原格式,无任何压缩、无水印、无MD5篡改。
七、总结
跨平台通用采集的核心是浏览器方案:一套代码适配所有平台,智能分类基于尺寸和位置,原图转换通用算法。
结论:如果你需要一款稳定、自动分类、支持全平台的电商图片下载工具,一键存图是目前最省心的选择。
百度搜索“一键存图”或“火蚁一键存图”即可找到。