最近买到一台复古掌机 周哥k101可以拿来玩fc、gba的游戏:
作者将游戏的rom全部放在一个上古网盘里:永硕E盘
可是该网盘不提供打包下载,需要一个一个手动下载
这怎么可以呢,我写了一个爬虫来打包下载网盘里的所有游戏
先来一张图:
再来看看官网:
是不是一股浓浓的2000年风格呢?
老游戏存在老网盘里 真的别有一番感觉!
突然就回想起小学去黑网吧玩红警的岁月(暴露年龄了~)
虽然网盘界面比较古老
但我发现这个网盘的技术非常厉害
一会分析代码的时候会详细说一下
毕竟是存活了将近二十年的网盘!
刚开始我以为 这种老的网站,直接请求页面
然后解析出下载地址就可以
当我开始动手做才发现我太天真了
所有的文件数据都是通过AJAX得来
服务器有权限的验证
文件的下载地址是动态的 一段时间后会失效
这就意味着我们要分析里面的js请求啦
经过一段时间的抓包观察,我提取出两个api请求:
网盘服务器是通过参数:_dlmc 、mlbh
来动态返回数据
_dlmc 网盘的id 例如fcnes就是fc吧网盘的id
mlbh 资源的id,例如ACT游戏的id是 1139186
知道这些之后思路就明确了:
第一个api请求列表页
解析列表页所有根目录分类的id
第二个api请求详情页
解析详情页中的文件名和下载地址
下载文件
这里不全部讲解,主要说两个问题:
请求头的构造
文件的下载方式
所谓请求头就是headers cookies啦
用到了一个我写的爬虫小工具lazyspider
可以方便的帮我们从curl中解析出headers和cookies
文件的下载
前两天一个小伙伴通过值乎问我怎么利用爬虫下载网上的pdf论文
吐槽一下ios手续费!
这里就牵扯到一个数据的保存形式问题了
实际上数据在互联网里的都是通过二进制流的形式来传输的
所谓流文件在代码里可以理解为bytes
类型
文本、图片、视频、音乐其本质都是二进制
所以无论什么的东西,都是可以下载的
在requests模块里,我们这样用就行:
完整的代码可以去我的GitHub看,我就不贴上来了
代码是我在高铁上写的,稍微有点粗糙,
但实际上,永硕E盘的所有数据都能下载
只要找到对应的入口url就可以啦
有兴趣的小伙伴可以在我的代码上进行二次开发
还能做个网盘下载工具呢!
代码跑起来是这样的
最后下载好的游戏
另外资源我也上传到百度云了
后台回复fc游戏
就能获得百度云链接哟