Cheerio使用attr('href')仅返回首个a标签链接的问题求解
问题原因
Cheerio的API设计和jQuery保持一致:
text()方法会自动将所有匹配元素的文本内容拼接后返回,所以你调用.find('a').text()可以拿到所有锚点的文本attr()方法只会返回匹配集合中第一个元素的对应属性值,这就是你只能拿到第一个链接href的核心原因,属于API设计的默认行为,不是你的操作逻辑错误。
正确实现方案
你需要手动遍历所有匹配到的a标签,逐个提取href属性后存入数组,再输出即可,修改后的完整代码如下:
const cheerio = require("cheerio"); const axios = require("axios"); axios.get("http://localhost:8000/sample_page_2.html").then(urlResponse => { const $ = cheerio.load(urlResponse.data); $('div.tos-post-type').each((i, element) => { const header = $(element) .find('h3') .text() .trim(); console.log('------------------------------------------------------------------------------------'); console.log('HEADER: ' + header); // 遍历所有a标签收集href属性 const links = [] $(element).find('a').each((_, aElement) => { links.push($(aElement).attr('href')) }) console.log('\nLINK(s): \n' + links.join('\n')); const description = $(element) .find('a') .text(); console.log('\nDESCRIPTION(s): \n' + description + '\n'); console.log('------------------------------------------------------------------------------------'); }); });
修改后运行即可输出你期望的全量链接结果。
内容的提问来源于stack exchange,提问作者aen612
相关产品推荐
相关产品推荐

