如果我想抓取的图像受 cloudflare 保护并出现 1020 错误,有没有办法使用 cheerio 抓取网站?

Is there a way to scrape website using cheerio if the image that i want to scrape is protected by cloudflare and giving 1020 error?

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

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

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

对于该网站,要下载像 this one 这样的图像,您需要在 http 请求中 header:

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

添加 header 然后它成功 returns 所需的图像。删除 header 会出现错误(在本例中为 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 调试器的“网络”选项卡,并在浏览器下载它的位置找到了对这个特定图像的引用。然后我查看了对服务器的请求以获取此图像,并查看了请求中的其他 header 到底是什么。我添加了两个简单的(ReferrerUser-Agent)来更准确地模拟浏览器。这将响应从 403 更改为 200。然后,我尝试查看是否可以删除这些 header 中的任何一个并且它仅适用于 Referrer header.

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