当前位置: 首页 > news >正文

京东整店商品图片视频批量下载技术:从商品列表到自动分类

引言

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

京东店铺的商品图片和视频是电商运营的重要素材。手动逐个商品下载效率极低,一个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)

八、总结

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

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

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

http://www.gsyq.cn/news/1483303.html

相关文章:

  • 2026年华为云OpenClaw/Hermes Agent配置Token Plan搭建保姆教程
  • AD9361接收功能验证踩坑记:从官方配置软件到SPI脚本的完整避坑流程
  • 弱口令与命令爆破 知识点总结
  • 基于ARX结构的新型序列密码算法FlashLight
  • APK签名流程深度解析:安卓应用安全的核心保障
  • 2026年资质齐全的样板间彩绘品牌企业推荐 - mypinpai
  • 2026年亿路交通设施口碑如何 - mypinpai
  • 从Linux内核源码nand_ecc.c看ECC校验:如何用空间换时间优化嵌入式存储性能
  • 学习周报四十八
  • 如何让数据科学在GPU上“飞”起来:从龟速到百倍加速的实战指南
  • 选球场围网加工厂?2026年持盈金属丝网实力上榜 - mypinpai
  • HarmonyOS FIDO 免密认证:让你的APP支持用指纹和人脸代替密码
  • 深度专栏 | 粉碎感官玄学:精品可可的冷酷重构与物理变量
  • 从登录页到搜索框:手把手拆解微信小程序input在不同业务场景下的最佳实践
  • Linux网络管理
  • 安卓设备调试核心技术剖析:ADB命令深度实践指南
  • NSK极速滚珠丝杠USFC 2040-6技术手册
  • 关于拥塞控制的几点思考
  • 嵌入式软件工程师_面试题练习_01
  • 2026年上海冷轧/热镀锌/高强钢/酸洗板/汽车钢/优特钢厂家推荐排行榜:高等级钢材牌号全解析与实力厂商权威对比指南 - 品牌发掘
  • 垂直行业企业怎么做精准GEO优化
  • 音频信息传输系统第四周
  • 江苏汇生红木推荐,其家具性价比高吗 - myqiye
  • 智读致用《埃隆之书》9|我们必须实干制造:原型不值钱,量产才值钱
  • 为什么C盘总是最先满?NTFS/FAT32/exFAT的前世今生
  • 手把手教你用ZLToolKit的WorkThreadPool优化你的音视频流媒体服务性能
  • 2026诸暨下水道疏通,地漏马桶疏通专业的师傅选择谁比较好?建议选公安备案+特种作业操作证! - 极速版本
  • 做了 3 款 AI 产品才明白:工程化才是小团队的第一道生死线
  • 汽车诊断工程师必看:ISO15765-2网络层协议实战解析与CANoe配置指南
  • 电子汽车衡操作便捷,靠谱吗 - 工业品牌热点