Cheerio.js的.each()搭配.find('a').text()返回单个长字符串问题
问题原因
- 核心错误是遍历对象选择错误:你当前的选择器获取的是表格的
<tbody>节点,目标页面仅存在1个<tbody>元素,因此.each()只会执行1次循环。 - Cheerio的
.text()方法默认会将所有匹配元素的文本内容拼接为单个字符串返回,因此循环中拿到的是整个下所有标签的文本拼接结果,数组仅存入1个长字符串,不符合预期。 - 你之前尝试将文本存入单独变量再插入数组无法解决问题,是因为没有修正遍历对象错误的核心问题,该异常和
.each()本身的返回逻辑无关。
修复方案
将遍历对象改为<tbody>下的所有<tr>行元素即可,修改后代码如下:
const getTopCollections = async () => { const response = await axios.get('https://www.nft-stats.com/top-collections/7d') const $ = cheerio.load(response.data) const return_data = [] // 选择表格tbody下的所有tr行作为遍历对象 const tableRows = $('table tbody tr') tableRows.each((i, element) => { // 对单一行查找a标签取文本,trim去除首尾空白 let col_name = $(element).find('a').first().text().trim() // 可选过滤空值避免无效条目 if (col_name) { return_data.push(col_name) } }) console.log(return_data) return return_data }
内容的提问来源于stack exchange,提问作者burneverything1
相关产品推荐
相关产品推荐

