如何使用Cheerio在img src属性而不是Base64编码的图像中获取实际的URL?

时间:2019-10-02 12:54:58

标签: web-scraping cheerio request-promise

我正在使用一种表单来发布URL,并对其进行处理以从网站获取数据以进行剪贴。一切正常,除了图像的src返回base64图像文件而不是实际的URL。

https://www.amazon.in/Arden-Grange-Mini-Adult-Food/dp/B01EVLSZN2/

我试图通过data-old-hires属性获取相同的数据,但并非所有页面在网站上都有该数据。所以我不能依靠它。

try {
    const html = await request.get(url)
    const $ = await cheerio.load(html)

    const imageURL = $('#imgTagWrapperId').find('img').attr('src')

    res.render('results', {
        imageURL
    })
} catch (err) {
    console.log(`APP ERROR: ${err.message}`)
    res.render('index', {
        err
    })
}

那么我如何在src属性而不是base64编码的图像中获取实际数据?

1 个答案:

答案 0 :(得分:0)

我认为图像的URL隐藏在data-a-dynamic-image属性值中的某个位置。因此,您可以解析JSON格式的值。

const cheerio = require ('cheerio')
const express = require ('express')
const request = require ('request-promise')
const app = express()
const port = 3000
const url = 'https://www.amazon.in/Arden-Grange-Mini-Adult-Food/dp/B01EVLSZN2/'

app.get('/', async (req, res) => {

    try {
        const html = await request(url)
        const $ = await cheerio.load(html)

        const imageURLJSON = JSON.parse($('#imgTagWrapperId img').attr('data-a-dynamic-image'))

        res.send (imageURLJSON)
    } catch (err) {
        console.log(`APP ERROR: ${err.message}`)
        res.render('index', {
            err
        })
    }

})

app.listen(port, () => console.log(`Example app listening on port ${port}!`))