京东整店商品图片视频批量下载技术:从商品列表到自动分类
2026/6/8 1:23:57 网站建设 项目流程

引言

很多开发者在问:“能下载京东主图视频的软件推荐”“支持京东主图视频下载的软件有吗?”

京东店铺的商品图片和视频是电商运营的重要素材。手动逐个商品下载效率极低,一个200个商品的店铺需要16-32小时。

本文将完整解析京东整店图片视频批量采集的技术架构,包括商品列表获取、图片提取(原图)、视频提取(mp4/m3u8)、自动分类等核心模块。

一、京东整店采集架构

text

┌─────────────────────────────────────────────────────────────────────────────┐ │ 京东整店图片视频批量采集架构 │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ 店铺URL ──→ 获取商品列表 ──→ 解析分页 ──→ 商品URL队列 │ │ │ │ │ │ │ │ ▼ ▼ ▼ ▼ │ │ 链接验证 列表页解析 页码遍历 FIFO队列 │ │ │ │ ───────────────────────────────────────────────────────────────────────── │ │ │ │ 商品URL ──→ 加载页面 ──→ 提取图片 ──→ 提取视频 ──→ 分类保存 │ │ │ │ │ │ │ │ │ ▼ ▼ ▼ ▼ ▼ │ │ 队列消费 浏览器方案 主图/SKU/详情 mp4/m3u8 按商品分类 │ │ │ └─────────────────────────────────────────────────────────────────────────────┘

二、京东店铺商品列表获取

2.1 分页解析

python

class JDShopParser: """京东店铺商品列表解析器""" def __init__(self): self.browser = BrowserEngine() def get_all_product_urls(self, shop_url: str) -> List[str]: """获取京东店铺所有商品链接""" urls = [] page = 1 while True: # 京东店铺分页URL格式 page_url = f"{shop_url}/search-1-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-{page}.html" browser = self.browser.CreateBrowser(page_url) if not PageLoader.WaitForPageReady(browser, timeout=10): break # 提取当前页商品链接 script = """ Array.from(document.querySelectorAll('.gl-item .p-img a, .J_ItemPic a')) .map(a => a.href) .filter(href => href && href.includes('item.jd.com')); """ new_urls = ExecuteJavaScript(browser, script) if not new_urls: break urls.extend(new_urls) print(f"第{page}页: 发现{len(new_urls)}个商品") page += 1 return urls

三、京东商品图片提取

3.1 图片URL提取与转换

javascript

// jd_image_extractor.js - 京东商品页图片提取 (function() { 'use strict'; class JDImageExtractor { constructor() { this.images = { main: [], // 主图 sku: [], // SKU图(颜色/尺码) detail: [] // 详情图 }; } // 获取京东原图URL getOriginalUrl(url) { if (!url) return null; // 去除京东缩略图参数 // 例如: xxx.jpg!q70.jpg -> xxx.jpg url = url.replace(/!q\d+\.jpg$/, '.jpg'); url = url.replace(/\.n\.jpg/, '.jpg'); url = url.split('?')[0]; return url; } // 提取主图 extractMainImages() { const mainSelectors = [ '.spec-img', // 京东主图 '.J_zoomPic', // 京东放大镜图 '.preview-img img', // 预览图 '#spec-img' // 规格图区 ]; for (const selector of mainSelectors) { const img = document.querySelector(selector); if (img) { let url = img.src || img.getAttribute('data-lazy-img'); if (url) { return [this.getOriginalUrl(url)]; } } } // 轮播图 const carousel = document.querySelectorAll('.preview-thumb img, .J_thumImg'); const urls = []; carousel.forEach(img => { let url = img.src || img.getAttribute('data-lazy-img'); if (url) { urls.push(this.getOriginalUrl(url)); } }); return urls.length ? urls : []; } // 提取SKU图(颜色/尺码图) extractSkuImages() { const skuImages = []; const skuContainer = document.querySelector('.sku-img-list, .J_skuImgList'); if (skuContainer) { const imgs = skuContainer.querySelectorAll('img'); imgs.forEach(img => { let url = img.src || img.getAttribute('data-lazy-img'); if (url) { // 提取SKU属性名称 let name = img.alt || img.title; if (!name || name.length > 20) { name = '属性图'; } skuImages.push({ url: this.getOriginalUrl(url), name: name }); } }); } return skuImages; } // 提取详情图 extractDetailImages() { const detailImages = []; const detailContainer = document.querySelector('#detail, .detail-content, .J_detailContent'); if (detailContainer) { const imgs = detailContainer.querySelectorAll('img'); imgs.forEach(img => { let url = img.src || img.getAttribute('data-lazy-img'); if (url) { detailImages.push(this.getOriginalUrl(url)); } }); } return detailImages; } // 主入口 extract() { this.images.main = this.extractMainImages(); this.images.sku = this.extractSkuImages(); this.images.detail = this.extractDetailImages(); return this.images; } } const extractor = new JDImageExtractor(); return extractor.extract(); })();

四、京东商品视频提取

javascript

// jd_video_extractor.js - 京东商品页视频提取 (function() { 'use strict'; class JDVideoExtractor { extract() { // 方法1:video标签 const video = document.querySelector('.JDV-video video, .video-box video'); if (video && video.src) { return { url: video.src, type: video.src.endsWith('.mp4') ? 'mp4' : 'm3u8' }; } // 方法2:页面数据 if (window.pageConfig && window.pageConfig.product) { const product = window.pageConfig.product; if (product.videoUrl) { return { url: product.videoUrl, type: 'mp4' }; } } // 方法3:商品JSON数据 const scripts = document.querySelectorAll('script[type="application/ld+json"]'); for (const script of scripts) { try { const data = JSON.parse(script.textContent); if (data.video && data.video.contentUrl) { return { url: data.video.contentUrl, type: 'mp4' }; } } catch(e) {} } return null; } } const extractor = new JDVideoExtractor(); return extractor.extract(); })();

五、m3u8视频下载器

python

class M3U8Downloader: """m3u8视频下载器,支持并行下载和自动合并""" def __init__(self, max_workers=10): self.max_workers = max_workers self.headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', 'Referer': 'https://item.jd.com/' } def download(self, m3u8_url: str, output_path: str) -> bool: # 1. 解析m3u8获取ts片段列表 playlist = m3u8.load(m3u8_url, headers=self.headers) segments = [seg.uri for seg in playlist.segments] # 2. 并行下载ts片段 ts_files = [] with ThreadPoolExecutor(max_workers=self.max_workers) as executor: futures = [] for i, ts_url in enumerate(segments): ts_path = f'temp_{i:05d}.ts' futures.append(executor.submit(self._download_ts, ts_url, ts_path)) ts_files.append(ts_path) for future in as_completed(futures): if not future.result(): return False # 3. 合并为mp4 with open(output_path, 'wb') as outfile: for ts_file in ts_files: with open(ts_file, 'rb') as infile: outfile.write(infile.read()) # 4. 清理临时文件 for ts_file in ts_files: os.remove(ts_file) return True def _download_ts(self, ts_url: str, ts_path: str, retry: int = 3) -> bool: for attempt in range(retry): try: resp = requests.get(ts_url, headers=self.headers, timeout=30) if resp.status_code == 200: with open(ts_path, 'wb') as f: f.write(resp.content) return True except: time.sleep(1) return False

六、图片质量说明

重要:一键存图下载的是京东的原图、原尺寸、原格式,无任何压缩、无水印、无MD5篡改。

七、完整采集流程

python

class JDShopCollector: def collect_shop(self, shop_url: str, output_dir: str): # 1. 获取所有商品链接 parser = JDShopParser() urls = parser.get_all_product_urls(shop_url) # 2. 批量采集 for url in urls: self._collect_product(url, output_dir) def _collect_product(self, url: str, output_dir: str): browser = self.browser.CreateBrowser(url) PageLoader.WaitForPageReady(browser) # 提取图片 images = ExecuteJavaScript(browser, JDImageExtractor.script) # 提取视频 video = ExecuteJavaScript(browser, JDVideoExtractor.script) # 保存 self._save_product(images, video, output_dir)

八、总结

京东整店图片视频批量采集的核心是:获取店铺商品列表 → 逐个加载 → 提取原图和视频 → 自动分类保存。

结论:如果你需要一款稳定、自动分类、支持全平台的电商图片下载工具,一键存图是目前最省心的选择。

百度搜索“一键存图”或“火蚁一键存图”即可找到。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询