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

Node+Puppeteer+Cheerio爬取表格:表头值无法作为对象键的问题

问题:Node.js+Puppeteer+Cheerio爬取表格时对象键无法正确获取表头值

我正在用Node.js、Puppeteer和Cheerio爬取表格的表头与表尾信息,调试时确认循环里能拿到正确的表头文本hElement和表尾文本fElement,但把数据推入数组时,所有对象的键都是hElement而非实际的表头值,输出数组示例如下,请问哪里出错了?

代码片段

const data = await page.content(); // get all page html
const $ = cheerio.load(data);

const head = $('#tblAcctBal > thead > tr');
const foot = $('#tblAcctBal > tfoot > tr');
const h = $(head).find('th');
const f = $(foot).find('th');
for (let i = 0; i < h.length; i++) {
  const hElement = $(h[i]).text();
  const fElement = $(f[i]).text();
  myArr.push({hElement: fElement });
}
console.log(myArr);

输出示例

0:
{hElement: ''}
1:
{hElement: ''}
2:
{hElement: ''}
3:
{hElement: ''}
4:
{hElement: ''}
5:
{hElement: '$0.00'}
6:
{hElement: '$0.00'}
7:
{hElement: '$0.00'}
8:
{hElement: '$0.00'}
9:
{hElement: '$0.00'}
解决方法

问题出在对象字面量的写法上:你直接写{hElement: fElement}时,JavaScript会把hElement当作固定的字符串键名,而不是把变量hElement的实际值作为键。

要解决这个问题,需要使用JavaScript的计算属性名语法——把变量用方括号[]包裹起来,这样就会将变量的取值作为对象的键名。

修改后的循环代码如下:

for (let i = 0; i < h.length; i++) {
  const hElement = $(h[i]).text();
  const fElement = $(f[i]).text();
  // 用方括号包裹hElement,将变量值作为键名
  myArr.push({ [hElement]: fElement });
}

这样修改后,数组里每个对象的键就会是表头的实际文本值,而不是固定的hElement了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:20:16