node爬虫爬取小说

node爬虫爬取小说

node爬虫爬取小说

最近发现自己喜欢的一个小说无法下载,网页版广告太多,操作太难受,只能自己写个爬虫把内容爬下来放在阅读器里面看
项目下载地址:源码下载
本来想上传个免费资源的,结果审核通过后发现需要10积分,没有办法设置成免费的,我抽空把资源上传到百度云再分享出来,有需要的朋友可以留言

直接上代码

const cheerio = require("cheerio");
const puppeteer = require("puppeteer");
const axios = require("axios");
const fs = require("fs");

/**
 * 公共请求链接方法
 * @param url 请求链接后缀(例:https://www.baidu.com/zhangsan/111 中 /张三/111 是后缀)
 */
const getPage = async (url) => {
  //请求链接
  const { data } = await axios.get(`https://www.9biquge.com${url}`, {
    headers: {
      "user-agent":
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36 Edg/99.0.1150.36",
    },
  });
  //返回请求结果
  return data;
  // console.log('抓取网页成功')
};

//主方法
const main = async () => {
  //请求小说章节列表(找那种所有章节都在一个目录下的页面,如果有翻页的话比较麻烦)
  const pageData = await getPage("/25/25538/");
  //转换页面数据变为节点
  const $ = cheerio.load(pageData);
  //获取到所有章节标题节点(可通过f12查看)
  const $list = $("#list dd a");
  //查看有多少章
  console.log($list.length);

  //开始循环标题节点
  for (let i = 0; i < $list.length; i++) {
    //拿到标题节点中的页面链接并请求数据(这里可以灵活获取,只要能拿到就行,拿到之后看一下数据是什么样的,完整的还是只有后缀,我这里是只有后缀的)
    const pageItemData = await getPage($list[i].attribs.href);
    //同样转化为节点
    const $$ = cheerio.load(pageItemData);
    //获取所有文本数据,我这里是一行行进行处理,因为前后中间都有空格,所以我处理一下,不然到时候排版我不喜欢
    let datailText = "";
    for (let j = 0; j < $$(".content_detail").length; j++) {
      datailText +=
        $$(".content_detail")[j].children[0].data.replace(/\s/g, "") + "\n";
    }
    //写入文件,文件需要新建好,就在项目根目录下下面新建,这里需要替换文件名
    fs.appendFileSync(
      "./我一个史莱姆.txt",
      "\n\n" + $$(".bookname h1").text() + "\n\n" + datailText
    );
    console.log($$(".bookname h1").text());
    //睡眠一秒钟,防止请求频繁被封ip
    await sleep(1000);
  }
};

/*
休眠函数sleep
调用 await sleep(1500)
 */
function sleep(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

main();

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值