京东整店商品图片视频批量下载技术:从商品列表到自动分类
引言很多开发者在问“能下载京东主图视频的软件推荐”“支持京东主图视频下载的软件有吗”京东店铺的商品图片和视频是电商运营的重要素材。手动逐个商品下载效率极低一个200个商品的店铺需要16-32小时。本文将完整解析京东整店图片视频批量采集的技术架构包括商品列表获取、图片提取原图、视频提取mp4/m3u8、自动分类等核心模块。一、京东整店采集架构text┌─────────────────────────────────────────────────────────────────────────────┐ │ 京东整店图片视频批量采集架构 │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ 店铺URL ──→ 获取商品列表 ──→ 解析分页 ──→ 商品URL队列 │ │ │ │ │ │ │ │ ▼ ▼ ▼ ▼ │ │ 链接验证 列表页解析 页码遍历 FIFO队列 │ │ │ │ ───────────────────────────────────────────────────────────────────────── │ │ │ │ 商品URL ──→ 加载页面 ──→ 提取图片 ──→ 提取视频 ──→ 分类保存 │ │ │ │ │ │ │ │ │ ▼ ▼ ▼ ▼ ▼ │ │ 队列消费 浏览器方案 主图/SKU/详情 mp4/m3u8 按商品分类 │ │ │ └─────────────────────────────────────────────────────────────────────────────┘二、京东店铺商品列表获取2.1 分页解析pythonclass 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, timeout10): 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() { // 方法1video标签 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[typeapplication/ldjson]); 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视频下载器pythonclass M3U8Downloader: m3u8视频下载器支持并行下载和自动合并 def __init__(self, max_workers10): 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, headersself.headers) segments [seg.uri for seg in playlist.segments] # 2. 并行下载ts片段 ts_files [] with ThreadPoolExecutor(max_workersself.max_workers) as executor: futures [] for i, ts_url in enumerate(segments): ts_path ftemp_{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, headersself.headers, timeout30) 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篡改。七、完整采集流程pythonclass 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)八、总结京东整店图片视频批量采集的核心是获取店铺商品列表 → 逐个加载 → 提取原图和视频 → 自动分类保存。结论如果你需要一款稳定、自动分类、支持全平台的电商图片下载工具一键存图是目前最省心的选择。百度搜索“一键存图”或“火蚁一键存图”即可找到。