欢迎光临散文网 会员登陆 & 注册

[破事水] 如何下载B站所有的404图片?

2020-08-12 02:11 作者:进栈检票  | 我要投稿

众所周知,当我们在B站打开一个并不存在或者已被删除的页面时,会被引向一个错误页面,如图:

当你兴奋的点进一个aid/bvid然后发现是这个样子……

//www.bilibili.com/404

其实把404换成400、403、503甚至100都会引向这个页面,不过打开console一看……还是404

还是404

我们可以看到这个404页面上放有图片,大概都是有关B站官方形象的漫画,可以更换显示,一共有几十张的样子。首先可以猜测,这些图片的地址是通过请求一个API返回的。翻一下XHR请求,找到请求如下,是没有请求参数的静态API。

//www.bilibili.com/activity/web/view/data/31

观察其响应体,定位到图片地址的所在位置,如图:

API及其响应体

设整个响应体为source,获取 加上了`https:`和HTML换行标签的所有图片地址的数组 的代码如下:

source.data.list.map(el => 'https:' + el.data.img + '\<br\/\>')

设上述数组为list,将这个数组转换成长文本(不用换行符分行,前面分好了)的代码如下(Array.reduce()最基础的应用):

list.reduce((a, b) => a + b))

组合以上代码得到这么长一串:

document.write(JSON.parse(document.body.innerText).data.list.map(el => 'https:' + el.data.img + '\<br\/\>').reduce((a, b) => a + b))

直接用浏览器访问这个API,在console中输入上述代码,即在页面中得到所有图片地址的文本,如图:

浏览器直接访问API的样子
是不是很神奇(doge 其实很无聊的啦

然后你就可以拿着这个列表用BitComet等工具下载了,下载到的图片如下:

共79张,有少量重复(不知何故)

还有一共7张图片藏在这个页面对应的JS即`error.js`里面,地址如下:

//activity.hdslb.com/zzjs/cartoon/errorPage-manga-[1-7].png

error.js的内容,下面还有请求刚才的API的XHR请求源码

图片内容和上面79个重复,不过第一张不知何故尺寸非常大,其他正常。

error.js中发现的7张图片


[破事水] 如何下载B站所有的404图片?的评论 (共 条)

分享到微博请遵守国家法律