【问题标题】:how to iterate in cheerio using .each如何使用 .each 在cheerio 中进行迭代
【发布时间】:2020-04-17 02:36:36
【问题描述】:

我正在尝试抓取一个页面以将 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 文档,您应该使用常规函数。

【问题讨论】:

  • 因为这是网络抓取,我决定使用不同的网站。我试图从 github io 页面上抓取,所以我认为他们可能一直在阻止脚本,因为我相信他们正在打击这种类型的活动。希望这对将来的某人有所帮助。

标签: jquery web-scraping foreach cheerio


【解决方案1】:

你真的想要地图:

let flags = $('figure').get().map(ele => {
  return {
    img: $(ele).find('img').attr('src'),
    country: $(ele).find('figcaption').text().trim()
  }
})
  • 我用的是js map而不是cheerio map,因为我觉得更简单。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    • 2012-01-21
    • 2012-09-24
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    相关资源
    最近更新 更多