如何在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
相关产品推荐
相关产品推荐

