在一个星期六还在加班的夜晚,身心已经很疲惫了,起身倒了牛奶,打开了B站,想看看最近有没有什么新番。曾经的二次元死宅,到如今几个月都没看过纸片人了。怀着偷懒的心情,我打开了哔哩哔哩,在新番放送表上有一部成功引起了我注意的番,
《总之就非常的🍋》一下子看完了几集,发现根本不够看啊,想继续看下去,然后打开了哔哩哔哩漫画,搜了一下居然要
我平常是很少看漫画,突然要花60大洋买这漫画确实有点舍不得(其实是因为穷),于是我就网上搜各大网站的资源,后来觉得在电脑上点来点去好不舒服,要是可以转成epub格式的漫画,我就可以在手机自带的图书软件上阅读了,于是我又在GitHub上搜索有没有开源的下载漫画程序,转转停停,我发现了一个用rust编写的cli程序,项目名为 mikack-cli ,经过一番了解,该程序支持ONE漫画网站的爬取,正当准备下载漫画的时候,程序跳出来报异常了说不支持该域名,发现ONE 漫画的域名改过了,我从作者的另外一个库 mikack 中发现域名更改的issues,由于是cli程序是基于这个库的,我问了问作者,回答是
作者的回答看上去还需要一段时间来完成,但我想看(白嫖)漫画的心是不接受的。
我以我微薄的认知稍微分析了一下:
我没有任何专业爬虫的经验,所以专业的爬虫库都排除掉
脑中浮现出的解决办法是:“我可以打开个浏览器让它自己一张、一章的保存吗?”(或许这就是非专业人士的想法吧😂)
既然是操作浏览器,还要保存文件,那NodeJS就成首选了
puppeteer 是一个无头的chrome,你可以编写脚本来控制它为你做任何你在浏览器上做的事,这对于我这实现这想法是最合适不过了
我抓取的网站是 coco漫画 原ONE漫画,首先要对网站进行初步的分析:
受到
mikack-cli
项目的启发,我决定用命令行的方式来开发此程序,用的包分别是
commander.js
和
Inquirer.js
。开发的过程中并没有什么太大的困难,由于是第一次使用puppeteer,要稍微注意一下page的对象操作就行了。此外,由于操作浏览器的原因,存在的大量的异步操作,所以代码满地的
async
await
语句。下面放几张截图
这个程序有着一个致命的缺点:保存太慢。但是我目前暂时没有办法去解决它,由于网络和懒加载的原因,只能模仿人的操作,一点一点的让浏览器往下滚动,保证每一张都能成功加载和保存。
我成功利用 epub-gen 转换成epub的格式,但是效果不太满意,放两张图对比一下
第一张是我用epub-gen转的,第二张是在GitHub上的 epub-manga-creator 项目转换过来的,据这个作者介绍,他是按照 DIgital-Comic-Association (デジタルコミック協議会)的规范来制作的,当然我不是这方面的专家,所以暂时没能迁移过来,后续我看看规范和该项目作者的源码,来达到转成第二张的效果。
如果有同学想自己尝试使用或者开发,可以clone到本地,代码有很多注释,实现逻辑也不难。 项目地址 ,需要注意的是我这里采用了 puppeteer-core ,启动的是本地的Chrome,使用前请检查是否有安装Chrome浏览器。你还可以使用 puppeteer ,因为它自带Chromium。
git clone https://github.com/XavierXuV5/manga
yarn install
yarn link
manga -h
平时闲着的时候,就想着写点小工具来玩玩,自己并不是这方面的专家,也没有深入的去学习这方面的知识,所以写的很多东西并不专业,就只能实现我的想法。简单一句话概括,有了想法就去实现,仅此而已。
自己也在这过程中享受到了快乐,也增长了见识,这就足矣。如果有人有更好的想法,也可以和我一起讨论一下,毕竟一个人的想法有限,多尝试才是王道。