5月29日 00:50

Cheerio 中如何高效使用选择器提取数据?

Cheerio 支持 CSS 选择器 + jQuery 扩展伪类,核心选择器分四类:基本(元素/ID/类)、层级(后代/子元素/兄弟)、属性(= ^= $= *=)、伪类(:first/:eq(n)/:contains()/:has())。高效用法的关键是缩小搜索范围:先选父容器再 .find(),缓存 $ 变量避免重复查找,用具体选择器替代通配符。

追问

.find() 和层级选择器 $('div p') 哪个更快? 性能差异极小,但 .find() 可读性更好且支持链式调用,推荐优先使用。已缓存的父元素上 .find() 还能跳过全局搜索。

如何获取元素的文本、属性和 HTML? .text() 取文本(含子元素文本拼接),.attr('href') 取属性值,.html() 取内部 HTML,.val() 取表单值。注意 .text() 会递归合并所有子节点文本。

.each() 和 .map() 有什么区别? .each() 遍历不返回值(适合副作用操作),.map() 返回数组(适合数据提取)。.map() 需链式调用 .get() 才能得到原生数组。

:contains() 和 .filter() 如何选择? :contains('text') 在选择器阶段过滤,写法简洁但不支持正则;.filter(fn) 在回调中可写任意判断逻辑,更灵活。

写段代码

javascript
const $ = cheerio.load(html); const $list = $('#article-list'); const titles = $list.find('.title').map((i, el) => $(el).text().trim() ).get();
标签:NodeJSCheerio