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

如何在Node.js的Cheerio中获取指定div的data-state数据?

解决方法

你可以直接在.client-state元素内部定位目标子div,不用先获取html再二次处理,Cheerio支持链式选择器,直接一步到位:

修改后的代码如下:

import cheerio from 'cheerio';

const id = ["98772"]

async function GetDataFunction () {
    try {
        for (let i = 0; i < id.length; i++) {
            let HTMLresponse = await ProductSearchFunction(id[i]);
            const $ = cheerio.load(HTMLresponse);

            // 直接定位目标div:在client-state下找id为Here-Goes-Some-Div-ID的元素
            const targetDiv = $('.client-state #Here-Goes-Some-Div-ID');
            if (targetDiv.length) {
                // 获取data-state属性值
                const dataStateStr = targetDiv.attr('data-state');
                try {
                    // 解析成JSON对象
                    const dataState = JSON.parse(dataStateStr);
                    console.log('提取到的JSON数据:', dataState);
                } catch (parseErr) {
                    console.error('JSON解析失败:', parseErr);
                }
            } else {
                console.log('未找到目标div');
            }
        }
    } catch (err) {
        console.error('请求或处理出错:', err);
    }  
};
GetDataFunction()

关键步骤说明:

  • 链式选择器:$('.client-state #Here-Goes-Some-Div-ID') 直接在class为client-state的元素内部查找目标id的div,比先取html再重新解析高效得多。
  • 获取属性:用.attr('data-state')直接拿到该div的data-state属性值。
  • JSON解析:因为data-state里的内容是JSON格式字符串,用JSON.parse()转成可操作的JavaScript对象;加try-catch是防止JSON格式不完整(比如你提供的示例HTML里的JSON少了一个闭合的})导致程序崩溃。

另外补充:id是页面唯一标识,即使不用.client-state前缀,直接$('#Here-Goes-Some-Div-ID')也能找到目标元素,但加上前缀可以确保是在指定父元素下的子元素,避免页面其他地方出现同名id的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:31:07