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

使用Puppeteer无法解析SEC Edgar网站表格数据求助

解决SEC Edgar表格内容提取问题

问题根源

SEC Edgar的表格数据是动态异步加载的,domcontentloaded仅等待DOM结构加载完成,但表格实际内容可能还未从后端获取并渲染到页面中,导致你能拿到tbody元素但里面没有可解析的行数据。

修正后的代码

const puppeteer = require('puppeteer');

const getData = async () => {
  const browser = await puppeteer.launch({
    headless: false,
    defaultViewport: null,
  });

  const page = await browser.newPage();

  await page.goto("https://www.sec.gov/edgar/search/#/category=custom&entityName=0001551152&forms=10-K%252C11-K", {
    waitUntil: "networkidle2", // 等待网络请求稳定,适配动态加载页面
  });

  // 显式等待表格行元素加载完成,超时时间10秒
  await page.waitForSelector('tbody tr', { timeout: 10000 });

  const data = await page.evaluate(() => {
    const tableBody = document.querySelector('tbody');
    const records = [];

    // 遍历表格行,过滤无内容的空行
    tableBody.querySelectorAll('tr').forEach((row) => {
      const rowData = [];
      const cells = row.querySelectorAll('td');
      if (cells.length > 0) {
        cells.forEach((cell) => {
          rowData.push(cell.textContent.trim());
        });
        records.push(rowData);
      }
    });

    return records;
  });

  console.log(data);

  await browser.close();
};

getData();

关键调整说明

  • 替换waitUntil参数为networkidle2:等待页面网络连接数降至2个以下,确保动态数据加载完成
  • 添加page.waitForSelector('tbody tr'):强制等待表格行元素出现,避免在内容未渲染时执行解析逻辑
  • 增加空行过滤:排除页面中可能存在的无内容行,避免返回空数据数组

另外注意,SEC Edgar有访问频率限制,个人项目中建议在页面加载后添加适当延迟,避免被限制访问:

// 在page.goto之后添加
await page.waitForTimeout(2000);

内容的提问来源于stack exchange,提问作者Harsh Divate

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:58:27