怎么用node抓取小说章节
发表于:2024-12-12 作者:千家信息网编辑
千家信息网最后更新 2024年12月12日,本文小编为大家详细介绍"怎么用node抓取小说章节",内容详细,步骤清晰,细节处理妥当,希望这篇"怎么用node抓取小说章节"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。准
千家信息网最后更新 2024年12月12日怎么用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安全错误
数据库的锁怎样保障安全
北京消费统计年鉴数据库
软件开发工程师职位缩写
电脑软件开发培训班
随书光盘数据库的作用
软件开发接口谁设计
数据库 复制列
苹果内蒙古数据库
方舟手游服务器如何卡移速
河津网络安全宣传标语
matlab连接数据库
河北鑫平网络安全
中国网络安全走势
上海发展软件开发项目信息
虹口区企业数据库研发市场价
中国最大的数据库公司
Sql是在数据库系统
软件开发自己做还是外包
杭州趣得网络技术有限公司
网络安全百日攻坚报告
服务器fpga作用
实时数据库删不掉怎么办
天津文件服务器机柜云空间
网络安全与等级保护技术研究
小鸭子软件开发
mac适合软件开发吗
网络安全上传漏洞文件
软件开发企业收入确认分录
北京标准网络服务器机柜云空间
票房数据库技术学院
数美互动网络技术