首页 > 解决方案 > 如何使用 .each 在cheerio 中进行迭代

问题描述

我正在尝试抓取页面以将 img src 拉入数组。我正在使用cheerio 库。

这是我所拥有的:

$ = cheerio.load(body);
let flags = [];

$('figure').each(function(i, ele) {
  // get image and country name, website use 'figcaption' under 'figure'
  let imgTag = $(ele).children('img').attr('src');
  let countryName = $(ele).children('figcaption').text().trim();

  // create obj
  let obj = {
    img: imgTag,
    country: countryName
  }

  // add to object
  flags[i] = obj;
  console.log(flags);
});

我的输出如下所示:

[ { img:
     'https://cdn.staticaly.com/gh/hjnilsson/country-flags/master/svg/ad.svg',
    country: 'Andorra' } ]

我在控制台中没有收到任何错误。但我正在寻找的是所有的 img src。它目前只抢到第一个。

经过研究,我看到了一个 github 问题,其中有人尝试使用箭头函数,但根据 Cheerio 文档,您应该使用常规函数。

标签: jqueryweb-scrapingforeachcheerio

解决方案


你真的想要地图:

let flags = $('figure').get().map(ele => {
  return {
    img: $(ele).find('img').attr('src'),
    country: $(ele).find('figcaption').text().trim()
  }
})
  • 我使用 js 地图而不是 Cheerio 地图,因为我认为它更简单。

  • Cheerio 文档不使用箭头函数,因为它们是在 ES6 之前编写的。随意使用它们。


推荐阅读