Cheerio 在嵌套表中查找所有链接

Posted

技术标签:

【中文标题】Cheerio 在嵌套表中查找所有链接【英文标题】:Cheerio find all links in nested table 【发布时间】:2021-06-11 03:53:18 【问题描述】:

我正在尝试检索特定表中的所有链接,但选择器似乎不起作用。当我将输出记录到控制台时,什么也没有出现,我做错了什么?

NodeJS 代码:

  $ = cheerio.load(body);
            $("#TableWithRules").find("a").each(function(i, link)
                if(i == 10) return;
                console.log($(link).text() , $(link).attr('href'), true);
                
            );

html 代码:

<div id="TableWithRules">
<table cellpadding="0" cellspacing="0" border="0" >
    <tr>
        <td valign="top" nowrap="nowrap"><a GET THIS LINK ==> href="/cgi-bin/cvename.cgi?name=CVE-2020-5911">CVE-2020-5911</a></td>
        <td valign="top">In versions 3.0.0-3.5.0, 2.0.0-2.9.0, and 1.0.1, the nginx Controller installer starts the download of Kubernetes packages from an HTTP URL On Debian/Ubuntu system.
</td>
    </tr>
<tr>
        <td valign="top" nowrap="nowrap"><a GET THIS LINK ==> href="/cgi-bin/cvename.cgi?name=CVE-2020-27730">CVE-2020-27730</a></td>
        <td valign="top">In versions 3.0.0-3.9.0, 2.0.0-2.9.0, and 1.0.1, the NGINX Controller Agent does not use absolute paths when calling system utilities.

</td>
    </tr>

</table> 
</div>

【问题讨论】:

【参考方案1】:

看起来你的选择器有问题,试试看:

$("#TableWithRules > table > tbody > tr > td").find("a").each(function(i, link)
    console.log($(link).text() , $(link).attr('href'), true);
);

【讨论】:

感谢您的回复,很遗憾,没有任何输出。 试试这个链接:codesandbox.io/s/node-js-sample-forked-t06qy?file=/index.js 新链接工作正常!我认为它在真实网站上不起作用,因为 TableWithRules div 在另一个 div 中,但现在我明白了它是如何工作的。

以上是关于Cheerio 在嵌套表中查找所有链接的主要内容,如果未能解决你的问题,请参考以下文章

将键/值对添加到哈希表(嵌套在数组中,嵌套在哈希表中)

如何在嵌套字典中查找所有出现的键,同时跟踪外部字典键值?

当嵌套表属于记录类型时,如何将数据填充到 Oracle 中的嵌套表中

如何在具有角度嵌套数据组的材料表中显示拆分标题

在 hive 外部表中存储嵌套的 json,其字段由 \ 分隔

无法将值存储到 oracle 中的嵌套表中