【问题标题】:Cheerio : Unable to find some nested elementsCheerio:无法找到一些嵌套元素
【发布时间】:2020-11-19 21:23:54
【问题描述】:

我想获取站点“https://unsplash.com/s/photos/india”中图像元素的前 6 个 src。但是,我可以获得前 3 张图像的图像 src,而不是最后 3 张图像。我很困惑,因为它们的图像元素都是一样的。

My Cheerio NodeJS code in here

 for (var i=0 ; i<numsrc; i++){

                var selector1 = 'div:nth-child(' + (i+1) + ') > figure > div > div._3A74U > a > div > img'
                photossrc = $ (selector1).attr('src')

                if (photossrc== undefined)
                    photossrc=''
                var tempData = JSON.parse('{"src":"' + photossrc + '"}')
                data.push (tempData)
            }

我在附图中运行上述内容后的输出

您可以看到前 3 个元素包含 url,但不包含最后 3 个元素。 Cheerio 可以提取嵌套属性是否有限制?我设置了一个 setTimeout,但它没有帮助。

【问题讨论】:

  • Unsplash 有官方 API。使用它。
  • 有些css是动态的,你应该做一些更简单的事情,比如img[src*=photo]
  • 感谢@pguardiario 指出动态css。除非我滚动页面,否则它不会出现。然后会出现css。 Cheerio 将无法做到这一点。我通过寻找“下载照片”找到了另一种获取 css 的方法。

标签: javascript node.js web-scraping cheerio


【解决方案1】:

我设法找到了答案,

就像@pguardiario 提到的那样,这是一个动态css。但是,在这种情况下,即使我执行 img[src*=photo] 也无法解决。唯一不变的是“下载照片”。我搜索“下载照片”并迭代到我想要的节点的子节点。

selector = 'a[title="Download Photo"]'
var nodes = $(selector1)

nodes.each (function (x,result){

 result = nodes.children[0].parent.attribs ..... //(whatever I want to grab)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多