Web抓取返回URI而不是图像的URL。 (Javascript Cheerio)

问题描述 投票:0回答:1

我正在使用Cheerio,并要求从网上抓取图片网址。当我想获取URL时,我一直在获取URI。我可以更改些什么来解决此问题?

const request = require('request-promise');
const cheerio = require ('cheerio');

(async () => {

    const webUrl = 'https://www.redbubble.com/lists/9747201/favorites';

    const response = await request(webUrl)

    const $ = cheerio.load(response);

    let sticker = $('img[class = "styles__image--2CwxX styles__rounded--1lyoH styles__fluid--3dxe-" ]').attr('src');

    console.log(sticker);
})();

不断返回

"data:image/gif;base64,R0lGODdhFQAXAPAAANba3wAAACwAAAAAFQAXAAACFISPqcvtD6OctNqLs968+w+GolUAADs="

何时返回

https://ih1.redbubble.net/image.479946364.2928/st,medium,507x507-pad,600x600,f8f8f8.u7.jpg
javascript web-scraping cheerio
1个回答
0
投票

这是因为页面源包含返回该值的图像。似乎他们已经使用base64的输出加密了该值,然后在页面加载后解密了src

您更有机会使用puppeteer抓取内容,该内容提供了用于控制浏览器(无头或无头)的高级API。您只需等待浏览器完成页面加载,然后抓取您希望获取的内容即可。

[另一种选择是通读您要抓取的那张丑陋的JS源代码,并寻找执行解密的部分。

更新:

您可能根本不需要cheerio或puppeteer。在检查页面本身中的XHR请求后,我发现它使用graphql API来获取所有这些图像和内容。请调查请求以获取所需的正确结果。

© www.soinside.com 2019 - 2024. All rights reserved.