爬取mangabz漫画

766 阅读2分钟

我正在参加「掘金·启航计划」

为什么会有这么一个想法呢

是因为mangabz这个网站不是很稳定,有时候一本漫画看着看着网就卡了,然后就出不来,所以我就想把内容下载下来一次性看个爽。

准备的工具

superagent和cheerio,一个是用来爬取网站的,一个是用来解析网站的。

分析网站结构

章节结构

这种结构还是很简单的,几句jQuery就能搞定 image.png

图片资源获取

图片详情页面

首先呢,可以寻找图片节点的id,cp_image,以及 它的上层id,cp_img。为什么?因为这都是经验啊!大部分单图片网站的资源都是这么搞的。

image.png

寻找详情页的js

我们可以一个js一个js的搜索id

  1. cp_image,包含的每个函数都可以过一遍,基本没什么有用的信息。所以可以走下一个节点了image.png
  2. cp_img,每个函数都过一版,可以在这个函数的结尾发现点不一样的东西image.png image.png
  3. 异步加载图片,那么我们可以控制台打印并双击找到这个函数image.png
  4. 这个我们就可以打断点然后猜想是不是这个方法出来的图片。image.png
  5. 复制地址出来发现是图片,那现在我们就可以直接开始编代码了。

代码实现

我们需要分析分析,漫画下载的步骤

  1. 首先是下载列表,。那么我们的列表需要存什么数据呢。
    1. id这个毋庸置疑,但是id得有效的利用起来,所以我们可以适用漫画章节的列表来当作这个章节的id
    2. 图片总数,也就是判断什么时候下载完成
  2. 然后列表下载完了之后就是去详情页下载图片,这时候就需要分析页面的结构以及参数配置,然后再发送一遍请求,就可以获取到图片的地址了
  3. 数据保存,文本的读写和图片的存储,文件不大,用fs就行。保存之后就可以直接走下一页了,直到走到图片总数,那么久可以走下一章了。
  4. 最后就是错误回溯,当视没有下载下来的某张图片,应该怎么办。我这的处理方法是,把图片分别命名为1、2、3...等的数字,那么我只要读取一遍所有文件的名称,然后过滤一遍,就可以找到差的是哪一页。

相当简单吧

代码放在这里了,欢迎大家体验。 github.com/NEOS55555/m…