如何在Cheerio中选中HTML页面所有元素并实现遍历?
Cheerio 选中并遍历所有元素的解决方案
1. 如何选中每一个元素?
当然可以!Cheerio完全支持标准CSS选择器,你只需要用**通配符选择器***就能匹配页面上的所有元素——不管它在DOM结构的哪一层,从根节点到最内层的嵌套元素都能一网打尽。代码示例:
const allElements = $('*');
2. 获取并遍历所有元素(含子元素)
你提到用$('body')只拿到了直接子元素,大概率是遍历方式的问题:$('body')本身只是选中<body>这个元素,如果你直接对它用.children(),那确实只能获取直接子元素。要拿到所有后代元素,有两种常用方法:
方法一:直接用通配符选中所有元素
最直接的方式就是用$('*'),它会返回包含整个页面所有元素的Cheerio对象,之后用.each()就能遍历每一个元素:
// 选中所有元素并遍历 $('*').each((index, elem) => { const $elem = $(elem); // 获取并处理元素文本,这里可以根据你的需求调整逻辑 const elementText = $elem.text().trim(); if (elementText) { console.log(`第${index+1}个元素的文本:${elementText}`); } });
方法二:从body出发获取所有后代元素
如果你只想聚焦在<body>范围内的所有元素,可以用.find('*')方法,它会获取选中元素下的所有后代元素(不管层级):
// 获取body下的所有后代元素 const bodyAllElements = $('body').find('*'); // 遍历处理 bodyAllElements.each((index, elem) => { const text = $(elem).text().trim(); // 你的解析逻辑... });
简单总结下:通配符*是选中所有元素的核心,配合.each()就能完成遍历解析。如果之前的问题是因为误用了.children(),换成.find('*')或者直接用$('*')就能解决啦!
内容的提问来源于stack exchange,提问作者Luke Tan
相关产品推荐
相关产品推荐

