nodejs爬取漫画

本文讲述了作者使用Node.js爬取漫画网站的历程,遇到的异步同步问题以及如何通过async-await和Promise解决。还讨论了如何在无法直接获取图片链接的情况下,通过浏览器分析获取图片资源,并分享了项目结构和所使用的第三方模块。
摘要由CSDN通过智能技术生成

起因

同学希望可以下载这个网站的连载漫画,之前爬过小说了,那么这次就来漫画吧,下载下来有快一个G的大小,162部,每部大约有二十几张图片。。


未解决的问题

下载一定时间后服务器端不响应,虽然可以通过setTimeout来控制每次发送请求的间隔,但觉得依然指标不治本。基本上下完一部后间隔3s的话下载五十部左右后会挂,需要手动重启。我总共重启了三次


需要解决并解决的问题

异步与同步问题

  • 问题
    因为为了方便按顺序观看,以及防止一次请求过多导致服务器端断开连接,需要选择使用同步方式设计逻辑,但是Nodejs的一大特色就是异步,第一次我没有处理直接异步发送请求,下载了几张图片之后服务器主动断开连接。。

  • 解决
    将最新es6的async-await与Promise结合使用,效果超级棒,完全实现同步,async-await的入门教程请移步这里,至于Promise嘛,我之前也总结过一篇 :-)

  • 注意事项
    使用async-await的文件在用node启动时需要加上 --harmony-async-await 后缀,而且node版本要是 7.0+的才行

无法根据页面获取图片链接

  • 问题
    这个网站似乎是等页面加载完全时在动用脚本来载入图片的,所以使用简单的request模块获取的页面中没有图片链接,而且翻页也是通过脚本进行的,亦无法获取下一张图片的链接

  • 解决
    就事论事,从浏览器界面中获取多个图片链接,寻找链接的命名规律,这样以一个图片链接为入口,就可获取全部图片的链接


项目结构

这里写图片描述

  • src文件夹用于存放下载后的漫画,具体是这样

这里写图片描述

  • download.js 脚本主入口
  • download_comic.js 用于下载一册漫画的模块
  • download_img.js 用于下载一页漫画(一张图片),并保存本地的脚本
  • get_list_uri.js 用于获取目录信息(这个模块可有可无,因为下载下的目录对应的书的页面无法获取img的uri的)

使用到的第三方模块

  • request 获取页面
  • cheerio 分析页面

项目源代码与注解

//get_list_uri.js
const request = require('request');
const cheerio = require('cheerio');
const fs = require('fs');
const path = require('path');
// 主入口
const main_uri = '
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值