You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript和Puppeteer将特定嵌套HTML表格转换为Excel/CSV

Puppeteer 提取无标识嵌套表格导出CSV方案

核心逻辑不依赖全量页面HTML拉取、不依赖content属性,直接基于目标表格的独有特征在DOM上下文精准定位,提取数据后直接生成标准CSV文件。

实现代码

const puppeteer = require('puppeteer');
const fs = require('fs');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  // 替换为实际访问的目标页面地址
  await page.goto('你的目标页面URL', { waitUntil: 'networkidle2' });

  const csvContent = await page.evaluate(() => {
    // 遍历页面所有表格做特征匹配
    const allTables = Array.from(document.querySelectorAll('table'));
    let targetTable = null;

    for (const table of allTables) {
      // 过滤规则1:排除带id、class属性的表格
      if (table.id || table.getAttribute('class')) continue;
      // 取表格tbody下的直属tr
      const tbody = table.tBodies[0];
      if (!tbody) continue;
      const rows = Array.from(tbody.querySelectorAll(':scope > tr'));
      // 过滤规则2:行数匹配29列对应行数
      if (rows.length !== 29) continue;
      // 过滤规则3:每行固定包含2个td子元素
      const structureValid = rows.every(tr => {
        const childNodes = Array.from(tr.children).filter(node => node.tagName === 'TD');
        return childNodes.length === 2;
      });
      if (structureValid) {
        targetTable = table;
        break;
      }
    }

    if (!targetTable) throw new Error('未匹配到符合特征的目标表格');

    // 提取列名与对应值,做CSV格式转义
    const headers = [];
    const rowValues = [];
    const dataRows = Array.from(targetTable.tBodies[0].querySelectorAll(':scope > tr'));
    dataRows.forEach(tr => {
      const [colCell, valCell] = tr.querySelectorAll('td');
      // 转义双引号、处理特殊字符避免CSV格式错乱
      const formatCell = (text) => `"${text.trim().replace(/"/g, '""')}"`;
      headers.push(formatCell(colCell.textContent));
      rowValues.push(formatCell(valCell.textContent));
    });

    return `${headers.join(',')}\n${rowValues.join(',')}`;
  });

  // 写入本地文件,添加BOM头兼容Excel打开不乱码
  fs.writeFileSync('./table_export.csv', `\uFEFF${csvContent}`, 'utf-8');
  await browser.close();
})();

注意事项

  • 定位规则完全匹配描述的表格特征:无class无id、共29行数据、每行固定2个td,不会和页面内其他11个表格混淆。
  • 代码自动处理了单元格内的逗号、双引号、换行符等特殊内容,不会出现CSV列错位问题。
  • 如果实际场景下表格行数存在浮动,把rows.length !== 29的判断调整为适配的范围即可,比如改为rows.length >= 20做宽松匹配。
  • 导出的CSV文件可以直接用Excel打开,不需要额外转码。

内容的提问来源于stack exchange,提问作者Renato C.Francisco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 06:06:48