使用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
相关产品推荐
相关产品推荐

