【问题标题】:How to get the first class from two same classes with cheerio如何用cheerio从两个相同的班级获得第一堂课
【发布时间】:2020-09-14 08:15:26
【问题描述】:

目前我正在使用cheerio 使用node.Js 制作一个网络爬虫。我想在class="panel-items-list 的第一个中获取数据。

html 看起来像这样

<div class="margin-bottom-=30">
  <div class="side-list-panel">
    <ul class="panel-item-list">...</ul>
  </div>
</div>
<div class="margin-bottom-=30">
  <div class="side-list-panel">
    <ul class="panel-item-list">...</ul>
  </div>
</div>

我已经这样做了

const relateArticle = $('.panel-items-list').map((i, section)=>{
                    let articles = $(section).find('h5');
                    return articles.text();

                }).get();

但它返回来自class="panel-items-list" 的数据。我如何从一类中获取数据?对不起,我的英语不好。提前致谢!

【问题讨论】:

  • 尝试添加你想要的元素的索引 .get(0)
  • 你选择的类是panel-items-list,但实际上它在你的HTML中是panel-item-list....
  • 您的“.panel-items-list”选择器不符合您在标记中显示的任何元素,您能否为示例提供更多上下文?

标签: javascript node.js cheerio


【解决方案1】:

要仅从 .panel-item-list 获取第一类,请使用 .get(0),这意味着您仅选择使用 .map 找到的第一个索引

另外,在您当前的code jQuery 中,您没有选择正确的class 选择器。

另外在获取文本时使用.trim() 方法来清理文本中的任何看不见的空格

现场工作演示:

const relateArticle = $('.panel-item-list').map((i, section) => {
  let articles = $(section).find('h5');
  return articles.text().trim();
}).get(0)

console.log(relateArticle) //Foo
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="margin-bottom-=30">
  <div class="side-list-panel">
    <ul class="panel-item-list">
      <h5>
        Foo
      </h5>
    </ul>
  </div>
</div>
<div class="margin-bottom-=30">
  <div class="side-list-panel">
    <ul class="panel-item-list">
      <h5>
        Bar
      </h5>
    </ul>
  </div>
</div>

【讨论】:

    【解决方案2】:

    使用 first():

    $('.panel-items-list').first().find('h5').text()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-16
      • 2023-03-14
      • 2021-06-28
      • 2016-03-12
      • 1970-01-01
      • 1970-01-01
      • 2017-04-03
      • 2014-09-18
      相关资源
      最近更新 更多