【问题标题】:using cheerio to scrape the html can't retrieve the second consecutive element使用 Cheerio 抓取 html 无法检索第二个连续元素
【发布时间】:2019-09-18 08:41:30
【问题描述】:

伙计们,我正在使用cheerio来抓取一个如下所示的html文档,我需要找出每个文章元素中两个元素的href。

<article>
  <div class="row">
       <div class="col-md-5 col-6">
          <a  class="btn" href="https://xxxxxx.png">abc1</a>
       </div>
       <div class="col-md-5 col-6">
          <a class="btn"  href="https://xxxxx">abc2</a>
       </div>
  </div>
</article>

<article>
   ....
</article>

....

下面是我的脚本,它使用 .btn 查找每个元素并使用 nth-child 按顺序获取它们,它可以成功获取第一个元素的 href,但是它无法获取第二个元素的值。知道如何解决这个问题吗?

const $ = cheerio.load(html);
$("article").each((i, element) => {
    let element1 = $(element).find(".btn:nth-child(1)").attr("href");
    let element2 = $(element).find(".btn:nth-child(2)").attr("href");

    console.log(element1,element2);
 });

【问题讨论】:

  • 您想要例如:div:nth-child(2) a.btn,因为它是第二个孩子的 div,而不是 a。
  • 谢谢,我明白了。 @pguardiario

标签: html node.js cheerio scrape


【解决方案1】:

nth-child(num) 选择器查找其直接父级的numth 子元素。这就是.btn:nth-child(2) 不返回任何元素的原因,因为第二个a 标记也是其直接父级的第一个子级(div 类col-md-5 和col-6)。

您可以通过以下方式访问a 标签:

const $ = cheerio.load(html);
$("article").each((i, element) => {
    let allBtns = $(element).find(".btn");
    let element1 = $(allBtns.get(0)).attr("href");
    let element2 = $(allBtns.get(1)).attr("href");

    console.log(element1,element2);
 });

在这种情况下,我们获取所有具有btn 类的元素,然后在该列表中查找第一个和第二个元素(从零开始的索引)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多