如何用Cheerio从非唯一class的HTML元素中提取指定文本?
解决Cheerio抓取目标文本生成JSON数组的方法
核心思路
问题根源在于直接对所有.hauptlink元素调用.text()会将所有元素的文本拼接在一起。正确做法是遍历每个.hauptlink元素,单独提取文本后整理成数组。
示例代码
const cheerio = require('cheerio'); // 替换为你实际抓取到的网页HTML内容 const html = '<div class="hauptlink">Darío Osorio</div><div class="hauptlink">U. de Chile</div><div class="hauptlink">Newcastle</div>'; const $ = cheerio.load(html); const targetTexts = []; // 遍历所有匹配的hauptlink元素 $('.hauptlink').each((_, element) => { // 提取当前元素的文本并去除首尾空格 const text = $(element).text().trim(); // 仅添加非空文本到数组 if (text) { targetTexts.push(text); } }); // 转换为指定结构的JSON数组 const jsonResult = JSON.stringify(targetTexts, null, 2); console.log(jsonResult);
输出结果
[ "Darío Osorio", "U. de Chile", "Newcastle" ]
关键说明
- 用
.each()遍历每个匹配元素,确保单元素文本独立提取 .trim()处理文本,避免多余空格或空内容混入结果- 最后通过
JSON.stringify()生成格式化的JSON数组,满足结构需求
内容的提问来源于stack exchange,提问作者Vaughn1234
相关产品推荐
相关产品推荐

