如果我要抓取的图像受 cloudflare 保护并出现 1020 错误,是否可以使用cheerio 抓取网站?

问题描述

我正在尝试创建一个漫画抓取网站作为个人项目,就在我完成整个网站时,我才知道我的网站无法抓取或查看图像,当我尝试转到图像,我收到 1020 错误,说明访问被拒绝,有什么方法可以绕过该错误,而无需从网站所有者那里获得授权令牌,

如果答案是否定的,那么谁能解释一下 cloudflare 如何保护图像不被抓取,因为据我所知,前端的所有内容都可以被抓取。

编辑:这是我想要抓取的 std::forward_list 之一,但是当我在浏览器上打开时,它给出了 1020 拒绝访问错误

解决方法

通过该网站,为了下载像 this one 这样的图像,您需要在 http 请求中使用此标头:

Referer: "https://mangakakalot.com/"

添加该标题,然后它成功返回所需的图像。删除该标头,您会收到错误消息(在本例中为 403)。

这是一个简单的测试应用:

const got = require('got');

const url = "https://s61.mkklcdnv61.com/mangakakalot/u1/uh918990/chapter_0_prologue/1.jpg";

const options = {
    headers: {
        Referer: "https://mangakakalot.com/",}
}

got(url,options).then(result => {
    console.log(result);
}).catch(err => {
    console.log(err);
});

仅供参考,如果您想知道我是怎么想出来的,我去了包含这张图片的网页。我查看了 Chrome 调试器的“网络”选项卡,找到了对浏览器下载此特定图像的引用。然后我查看了对服务器的请求以获取此图像,并查看请求中的其他标头。我添加了两个简单的(ReferrerUser-Agent)以更准确地模拟浏览器。这将响应从 403 更改为 200。然后,我尝试查看是否可以删除这些标头中的任何一个,并且它仅适用于 Referrer 标头。

我猜这里的 403 错误与您在浏览器中直接访问该链接时看到的 1020 错误之间的区别可能与所使用的 http 版本有关(浏览器比我的 nodejs 更先进脚本)。但是,关键是您现在可以下载上述脚本中的图像。