我正在使用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
这是因为页面源包含返回该值的图像。似乎他们已经使用base64的输出加密了该值,然后在页面加载后解密了src
。
您更有机会使用puppeteer抓取内容,该内容提供了用于控制浏览器(无头或无头)的高级API。您只需等待浏览器完成页面加载,然后抓取您希望获取的内容即可。
[另一种选择是通读您要抓取的那张丑陋的JS源代码,并寻找执行解密的部分。
更新:
您可能根本不需要cheerio或puppeteer。在检查页面本身中的XHR请求后,我发现它使用graphql API来获取所有这些图像和内容。请调查请求以获取所需的正确结果。