怎么用node抓取小说章节
发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,本文小编为大家详细介绍"怎么用node抓取小说章节",内容详细,步骤清晰,细节处理妥当,希望这篇"怎么用node抓取小说章节"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。准
千家信息网最后更新 2025年02月07日怎么用node抓取小说章节
本文小编为大家详细介绍"怎么用node抓取小说章节",内容详细,步骤清晰,细节处理妥当,希望这篇"怎么用node抓取小说章节"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
准备用electron
制作一个小说阅读工具练练手,那么首先要解决的就是数据问题,也就是小说的文本。
这里准备使用nodejs对小说网站进行爬虫爬取,尝试爬下一本小说,数据就不存放数据库了,先使用txt
作为文本存储
在node
中对于网站的请求,本身就存在http
和https
库,内部含有request
请求方法。
实例:
request = https.request(TestUrl, { encoding:'utf-8' }, (res)=>{ let chunks = '' res.on('data', (chunk)=>{ chunks += chunk }) res.on('end',function(){ console.log('请求结束'); })})
但是也就到此为止了,只是存取了一个html
的文本数据,并不能够对内部元素进行提取之类的工作(也可以正则拿,但是太过复杂)。
我将访问到的数据通过fs.writeFile
方法存储起来了,这只是整个网页的html
但是我想要的还有各个章节中的内容,这样一来就需要获取章节的超链接,组成超链接链表进去爬取
cheerio库
在文档中,可以使用示例进行调试
使用cheerio解析HTML
cheerio解析html时,获取dom节点的方式与jquery
相似。
根据之前获取到的书籍首页的html,查找自己想要的dom节点数据
const fs = require('fs')const cheerio = require('cheerio');// 引入读取方法const { getFile, writeFun } = require('./requestNovel')let hasIndexPromise = getFile('./hasGetfile/index.html');let bookArray = [];hasIndexPromise.then((res)=>{ let htmlstr = res; let $ = cheerio.load(htmlstr); $(".listmain dl dd a").map((index, item)=>{ let name = $(item).text(), href = 'https://www.shuquge.com/txt/147032/' + $(item).attr('href') if (index > 11){ bookArray.push({ name, href }) } }) // console.log(bookArray) writeFun('./hasGetfile/hrefList.txt', JSON.stringify(bookArray), 'w')})
打印一下信息
可以同时将这些信息也存储起来
现在章节数和章节的链接都有了,那么就可以获取章节的内容了。
因为批量爬取最后需要IP代理,这里还没准备,暂时先写获取某一章节小说的内容方法
爬取某一章节的内容其实也比较简单:
// 爬取某一章节的内容方法function getOneChapter(n) { return new Promise((resolve, reject)=>{ if (n >= bookArray.length) { reject('未能找到') } let name = bookArray[n].name; request = https.request(bookArray[n].href, { encoding:'gbk' }, (res)=>{ let html = '' res.on('data', chunk=>{ html += chunk; }) res.on('end', ()=>{ let $ = cheerio.load(html); let content = $("#content").text(); if (content) { // 写成txt writeFun(`./hasGetfile/${name}.txt`, content, 'w') resolve(content); } else { reject('未能找到') } }) }) request.end(); })}getOneChapter(10)
这样,就可以根据上面的方法,来创造一个调用接口,传入不同的章节参数,获取当前章节的数据
const express = require('express'); const IO = express();const { getAllChapter, getOneChapter } = require('./readIndex')// 获取章节超链接链表getAllChapter();IO.use('/book',function(req, res) { // 参数 let query = req.query; if (query.n) { // 获取某一章节数据 let promise = getOneChapter(parseInt(query.n - 1)); promise.then((d)=>{ res.json({ d: d }) }, (d)=>{ res.json({ d: d }) }) } else { res.json({ d: 404 }) } })//服务器本地主机的数字IO.listen('7001',function(){ console.log("启动了。。。");})
读到这里,这篇"怎么用node抓取小说章节"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
章节
小说
数据
内容
方法
链接
文本
文章
准备
存储
信息
参数
只是
网站
节点
不同
复杂
妥当
相似
到此为止
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全办公室设在哪儿
鹿泉网络技术员招聘
美国新兴互联网科技
律师办公数据库
服务器货物类采购保证金比例
科技金融互联网公司官网
中管院的人才数据库
如何在数据库中搜寻指定的表
噗噗互联网科技
方舟ARK服务器管理工具
数据库相关专业研究方向
云服务器硬盘是连续的吗
数据库tvp 技术
餐饮数据库实现代码
西藏智慧养老软件开发
电商和信息网络技术
中国国家网络安全官网
软件开发高级工程师是什么专业
软件开发哪个方向缺人
网络安全手抄报一等奖超级难
部署到服务器的英语
软件开发服务费开票要打名称吗
网络安全设备做3c认证
119网络安全教育
服务器安全性和稳定性
松山湖华为服务器部门
苏州阿里云服务器扩充
上海专业软件开发品质保障
梦幻西游平转服务器哪个区好点
数据库实验中运行的按钮不亮