jquery - 如何使用 .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 文档,您应该使用常规函数。
解决方案
你真的想要地图:
let flags = $('figure').get().map(ele => {
return {
img: $(ele).find('img').attr('src'),
country: $(ele).find('figcaption').text().trim()
}
})
我使用 js 地图而不是 Cheerio 地图,因为我认为它更简单。
Cheerio 文档不使用箭头函数,因为它们是在 ES6 之前编写的。随意使用它们。
推荐阅读
- python - python中是否有类似的功能,例如带有重试选项的robocopy?
- mysql - MySQL - 计算未清项目并从不同表中获取日期
- javascript - 如何修复删除下拉框中的元素(Materialize)
- powerbi - 希望在同一行中获取对两个单独问题有答案的实体的 ID 计数 - Power BI
- c# - 为 Unity 编写 FPS 限制器
- excel - 如何用 i=1 到 12 的循环重写这个子,而 'txt_Case_Number(i).Text' 有一个值?
- amazon-web-services - 每个账户允许的角色数量及其对 Lambda 函数的广泛影响
- java - Java 类转换异常:org.slf4j.impl.Slf4jLogger 不能转换为 ch.qos.logback.classic.Logger
- protractor - 为什么我会收到 TypeError: Cannot read property 'getText' of undefined error 即使我的 Web 元素引用是正确的?
- javascript - 如何将此ajax响应作为数组遍历?