Как получить фактический URL-адрес в атрибуте img src вместо изображения в кодировке Base64 с помощью Cheerio?

Я использую форму для отправки 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?


person Nuk3r    schedule 02.10.2019    source источник
comment
Это фактические данные. Позже он будет изменен с помощью javascript. Вам может понадобиться кукловод для этого.   -  person pguardiario    schedule 03.10.2019
comment
К вашему сведению, это удаление, а не удаление. Утилизация — это выбрасывание, как мусора.   -  person barny    schedule 18.05.2021


Ответы (1)


Я думаю, что 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}!`))
person Edi Imanto    schedule 02.11.2019