nodejs爬取在线轻小说

本文讲述了作者使用Node.js爬取一个提供轻小说在线阅读的网站,并将其按章节拆分保存为TXT文件的过程。文章详细介绍了所用到的模块如cheerio、request和iconv-lite,以及在处理文本编码和服务器响应限制时遇到的问题和解决方案。最后,作者计划改进代码,消除'回调金字塔'现象。
摘要由CSDN通过智能技术生成

起因

刚在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(
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值