起因
刚在B站看完《约会大作战》,觉得不错,听说还有轻小说,但是苦于找不到资源,后来发现一个网站有,但是提供下载的是一个TXT文件,就是说它把二十多册的内容合在一个TXT中了,看它网站上的目录还是比较清晰的,那我何不自己写一个脚本来按书名下载呢
- 网页截图:
- 脚本下载效果截图:
所用到的第三方module
cheerio 用于分析下载下来的HTML页面源代码
request 用于下载相应的页面
iconv-lite 用于对文本进行转码操作(这里用来将gbk转为utf8)
本地所建的module及项目目录
getContent.js
- 用于获取小说每一章节的内容
getPage.js
- 用于获取(下载)所需求的HTML页面
getUrlList.js
- 用于获取所有章节对应的url,以便于后面分类有序下载,获取相应内容
writeFile.js (主入口)
- 用于将获取的内容写入文件中(保存在src文件夹中)
所遇到的大问题
文本编码不同
那个网站使用的是gbk编码,但是我需要的是utf8编码,这个问题可以使用第三方模块 iconv-lite 来进行处理
网站服务器无法响应过多请求
估计那个网站访问的人不算多,所以服务器的性能可能不太高,我计算过,由于nodejs为异步的,所以会同时一次性发送192个请求,如果不进行处理,那么那个服务器最多只能响应170多个,这个可以通过setTimeout来进行分批请求解决
ps:如果直接从网站下载合在一个txt文件的小说的话,也是比较慢的
代码解析
// getPage.js
const request = require('request');
const iconv = require(