You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 22:45:08