← 返回
未分类

京东数据采集

使用浏览器自动化从京东搜索页采集商品数据,支持多页翻页、懒加载滚动、导出 CSV
使用浏览器自动化从京东搜索页采集商品数据,支持多页翻页、懒加载滚动、导出 CSV
叫我老大哥
未分类 community v1.0.0 1 版本 100000 Key: 无需
★ 1
Stars
📥 182
下载
💾 0
安装
1
版本
#latest

概述

京东数据采集

输入

  • $keyword: 搜索关键词(如"耳机"、"笔记本"、"手机")
  • $pages: 要采集的页数,默认2页

额外依赖

  • 浏览器(OpenClaw 内置 managed browser)
  • JD.com 不需要登录也能访问搜索页
  • 输出编码:UTF-8(CSV 可直接用 Excel/WPS 打开)

目标

从京东搜索页采集指定关键词的商品数据,导出为 CSV,包含标题、价格、销量、店铺四个字段。

步骤

1. 打开京东搜索页

用浏览器打开京东搜索,第1页:

https://search.jd.com/Search?keyword=URL编码后的$keyword&enc=utf-8&page=1

Success criteria: 页面加载完成,搜索框中显示关键词,结果区域可见

2. 慢速滚动加载全部商品(核心步骤)

京东使用懒加载,商品数据在滚动到可视区域后才加载。必须慢速滚动到底部。

使用 evaluate 执行以下 JavaScript:

await new Promise(resolve => {
  let scrolled = 0;
  const step = 400;
  const iv = setInterval(() => {
    window.scrollBy(0, step);
    scrolled += step;
    if (scrolled >= document.body.scrollHeight * 1.5) {
      clearInterval(iv);
      resolve('滚动完成');
    }
  }, 600);
});

Success criteria: 滚动完成后商品图片和价格完整显示

3. 提取商品数据

使用 evaluate 执行以下 JavaScript 提取函数:

function extractProducts() {
  const allDivs = document.querySelectorAll('div');
  const map = new Map(); // div -> data 去重用
  let counter = 0;

  for (const div of allDivs) {
    const text = div.textContent.trim();
    if (!text.includes('¥') || text.length < 80 || text.length > 2000) continue;
    if (text.includes('顶部导航') || text.includes('购物车')) continue;

    // 去重:跳过被已处理父容器包含的 div
    let skip = false;
    for (const existing of map.keys()) {
      if (existing.contains(div)) { skip = true; break; }
    }
    if (skip) continue;

    let title = text.split('¥')[0].trim().replace(/^广告/, '').split('\n')[0].trim();
    const priceMatch = text.match(/¥(\d+\.?\d*)/);
    const salesMatch = text.match(/已售(\d+[万+]?)/);
    let shop = '';
    for (const suffix of ['旗舰店', '专卖店', '专营店', '官方店', '总店']) {
      const idx = text.indexOf(suffix);
      if (idx > 0) {
        const before = text.substring(Math.max(0, idx - 30), idx + suffix.length);
        const m = before.match(/([^\s¥\n\d]+?)(?:旗舰店|专卖店|专营店|官方店|总店)/);
        if (m) { shop = m[0]; break; }
      }
    }

    if (title && title.length > 8 && !title.includes('热卖榜')) {
      map.set(div, {
        title: title.substring(0, 80),
        price: priceMatch ? '¥' + priceMatch[1] : '',
        sales: salesMatch ? '已售' + salesMatch[1] : '',
        shop
      });
    }
  }

  return [...map.values()];
}

Success criteria: 提取到的商品数量 > 10,每条包含标题和价格

4. 翻到下一页

使用 evaluate 查找并点击第2页按钮:

// 方法一:找分页容器中的"2"按钮
const pageBtns = document.querySelectorAll('[class*="page"] a, [class*="Page"] a, [class*="pagin"] *');
for (const btn of pageBtns) {
  if (btn.textContent.trim() === '2') {
    btn.click();
    break;
  }
}

// 如果方法一不行,回退到遍历所有元素
const all = document.querySelectorAll('a, span, em');
for (const el of all) {
  if (el.textContent.trim() === '2' && el.offsetParent !== null) {
    el.click();
    break;
  }
}

点击后等待 2-3 秒加载新页面。

验证翻页成功的方法:提取前3个商品标题,跟上一页对比——完全不同则翻页成功。

Success criteria: 页面内容改变,商品列表刷新为新的商品

5. 重复滚动 + 提取

重复步骤 2 和 3,将第 $pages 页的数据全部提取。

6. 合并保存为 CSV

// 用 evaluate 收集所有页的数据
// 在 Node.js 侧用 fs.writeFileSync 写入
const csvHeader = '标题,价格,销量,店铺';
const csvRows = allProducts.map(p => {
  // CSV 转义:含逗号或引号的字段用双引号包裹
  const escape = v => '"' + String(v || '').replace(/"/g, '""') + '"';
  return [escape(p.title), escape(p.price), escape(p.sales), escape(p.shop)].join(',');
});
const csv = [csvHeader, ...csvRows].join('\n');
// 写入 UTF-8 编码
fs.writeFileSync(outputPath, csv, 'utf-8');

输出路径:/Users/[用户名]/.openclaw/workspace/jd_{$keyword}_{$pages}pages.csv

Success criteria: 验证 wc -l 行数 = 1(表头)+ 商品总数,用 head 查看前3行确保无乱码

规则

  • 翻页必须点击页面按钮,不能只改 URL(京东是 SPA)
  • 每页都必须滚动到底部再提取
  • 翻页后必须验证内容变了(对比标题),变了才算成功
  • 商品标题要去掉"广告"前缀
  • 过滤导航栏、购物车等干扰元素
  • 输出 CSV 用 UTF-8 编码,Excel 直接打开不乱码
  • 每一步做完都要验证,不要假设成功

已知问题 & 注意事项

  • 京东搜索结果可能混入非相关商品(如"猜你喜欢"),自动过滤不了就保留
  • 部分商品没有销量数据,该字段会留空
  • 翻页按钮选择器可能随京东改版变化,如果方法一失效,需要遍历所有可见元素找"2"
  • 如果京东要求登录或出现验证码,需要用户手动干预

版本历史

共 1 个版本

  • v1.0.0 首个正式版本,支持京东商品数据采集、滚动懒加载、多页翻页 当前
    2026-05-09 20:37 安全 安全

安全检测

腾讯云安全 (Keen)

安全,无风险
查看报告

腾讯云安全 (Sanbu)

安全,无风险
查看报告

🔗 相关推荐

抖音全类型自动发布

user_f4e1eca6
抖音全类型作品自动发布——文章、图文、视频三种类型,支持AI封面、话题添加、背景音乐、自主声明、定时发布。基于多轮真实测试验证通过。
★ 1 📥 186

抖音自动回复评论

user_f4e1eca6
抖音评论区自动回复。支持两种模式:(1) 从创作者中心评论管理页面回复;(2) 从个人主页→点作品→评论区逐条回复。自动识别已回复/未回复,逐条发送。
★ 1 📥 181

抖音关注私信助手

user_f4e1eca6
抖音评论区关注私信助手——从作品评论区提取评论用户,进入个人主页点击关注,发送私信打招呼。自动识别已关注/未关注状态,逐条处理。
★ 0 📥 38