【问题标题】:href retrieval with cheerio用cheerio检索href
【发布时间】:2014-10-15 18:40:53
【问题描述】:

我有一个下载的 html 文件,看起来像这样

<html class="theme_">
<head>
<body>
    <div id="ad_1"></div>
    ...
    <div id="wrapper">
        <div id="top" style="height:11px;color:white;font-size:9px;font-weight:bold;"> </div>
        ...
        <div id="content" style="border-top:none;">
            ...
            <table id="user_list">
                <tbody>
                    <tr class="trodd">
                        <td width="10%" valign="center" align="center">
                        <td class="list_art" style="width:160px;">
                        <td class="main_entry">
                            <h4>
                            <h5>
                                <a class="list_album" href="https://rateyourmusic.com/release/single/electra__ita_/feels_good__carrots_and_beets_/" title="[Album833409]">Feels Good (Carrots & Beets)</a>
                                <span class="rel_date">(1982) [Single]</span>
                                </h5>
                            </td>
                            <td></td>
                        </tr>
                        <tr class="treven">

我需要访问表user_list 的每个&lt;tr class="trodd"&gt;&lt;tr class="treven"&gt; 条目并检索href。这是我现在拥有的代码,它只返回一个空数组。我无法理解的一件事是,cheerio 是否能够像这样找到每个class="list_album",或者您必须使用一堆$( ) 沿着文件的层次结构向下移动。

var cheerio = require("cheerio");
var file = "...path...";
var links = [];

var $ = cheerio.load(file);
$('list_album').each( function () {
    var link = $(this.attr('href'));
    links.push({"link": link});
});

console.log(links);

【问题讨论】:

    标签: javascript jquery node.js


    【解决方案1】:

    我这样做了,它对我有用:

    确保使用$(value) 而不是$(this)

    $('.list_album').each( (index, value) => {
       var link = $(value).attr('href');
       links.push({"link": link});
    });
    

    【讨论】:

      【解决方案2】:

      我没有足够的声誉来发表评论,所以我会在这里回答。 这似乎是一个错字,选择器上的“点”和 $ 包装器。试试这个。

      $('.list_album').each( function () {
         var link = $(this).attr('href');
         links.push({"link": link});
      });
      

      【讨论】:

      • 是的,我看过一些 Cheerio 的例子,也注意到了这两件事。它仍然返回一个空数组。不过,我很感激您的意见。
      【解决方案3】:

      我没有评论的声誉,但可能会帮助某人。OP 没有在给定的 sn-p 中添加点。 而不是$('list_album'),你需要使用$('.list_album')。这里点运算符是类选择器。

      【讨论】:

        【解决方案4】:

        我知道你知道我的更好的方法,但如果你喜欢我的方法或它对你有帮助,我有一些简单的方法可以支持我。 概述:$is 用于包装元素 a[data-hover='View All Results']is 我们要抓取的元素 data-hover 是一个类,View All Results 是类名

        let $ = cheerio.load(html); //take a content from page 
        let anchorElem = $("a[data-hover='View All Results']");
        let link = anchorElem.attr("href");
        console.log(link);//Print the link 
        

        【讨论】:

          【解决方案5】:
          const getHTML = async html => {
              const req =  await axios.get(html)
              const res =  await req.data
              return res
          }
          const parser = res => {
              let data = []
              const $  = cheerio.load(res)
          
              $('table tr td').each((i, elem) => {
                  data.push($(elem).find('a').attr('href'))
              })
              return data
          }
          

          【讨论】:

          • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
          • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助,质量更高,更有可能吸引投票。
          猜你喜欢
          • 2017-02-19
          • 1970-01-01
          • 2012-10-13
          • 1970-01-01
          • 1970-01-01
          • 2015-02-27
          • 2019-09-06
          • 2020-05-29
          • 2021-09-08
          相关资源
          最近更新 更多