使用nodejs爬取网页内容

前段时间沉迷一本小说,于是想下载成txt来观看,网上找了很久都没有找到资源,但是能找到可以在线观看的网站,于是产生一个想法,我能不能给它爬下来自己制作一个txt文档。

大概思路如下:打开该网站可以查看到网页的dom,根据dom将内容截取成字符串做一定的修改替换变成自己想要的字符串,然后写入本地的一个文件里面。

环境方面需要安装nodejs

依赖的话就是两个,一个是axios,用来发起网络请求的工具,也可以直接使用nodejs提供的http模块来获取,然后就是关键的cheerio,一个可以像jquery一样操作网页的工具库。

开搞

npm init -y

npm i axios cheerio --save

 index.js内容如下,每一行都注释了

const axios = require("axios"); // 引入axios--发请求
const cheerio = require("cheerio");  // 引入cheerio--处理网页
const fs = require("fs"); // 引入fs模块进行文件系统操作
// getMenu用来构建urlList
let getMenu = async () => {
  // 这里通过axios获取到页面的章节列表
  let { data } = await axios.get("http://www.tycqzw.net/148_148589/");
  // 将获取到的静态网页生成dom,初始化操作
  const $ = cheerio.load(data);
  // 根据网页选择到需要使用的数据,这里的结构是<div id="list"><dl><dd><a href="/148_148589/53672568.html">第五章 归去!</a></dd></dl></div>
  let list = $("#list dl dd a"); // 一个包含了所有a标签的类数组对象  
  let menuList = [];
  //开始遍历该对象并构建urlList
  for (const key in list) {
    const element = list[key];
    try {
      menuList.push("http://www.tycqzw.net" + $(element).attr("href"));
    } catch (error) {
      console.log("获取菜单错误");
    }
  }
  // 构建完成,开始缓存内容
  menuList.forEach(async (i, index) => {
    // 使用定时器来确保顺序
    setTimeout(() => {
      generateTxtByUrl(i);
    }, 500 * index);
  });
};

// 通过url生成内容
const generateTxtByUrl = async (url) => {
  try {
    let { data } = await axios.get(url);
    const $ = cheerio.load(data);
    // 获取章节的标题
    let title = $(".bookname h1").text();
    // 获取小说的内容,这里的内容里面比较乱,通过replace给无关的内容替换掉
    let content = $("#content")
      .html()
      .replace(/\s+/g, "")
      .replaceAll("&nbsp;&nbsp;&nbsp;&nbsp;", "    ")
      .replaceAll("<br><br>", "");
    // 标题+内容就是一章的整个内容
    let params = title + "\n" + content;
    const filepath = "./cscyjzyks.txt";
    // 使用fs开始写文件
    fs.appendFileSync(filepath, params, (err) => {
      if (err) throw err;
    });
    console.log(title + "缓存成功!");
  } catch (error) {
    console.log("缓存失败" + url);
  }
};
getMenu()

写完之后直接node index.js就可以愉快的爬内容了

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,用于构建服务器端和网络应用程序。升级Node.js版本可以获得更多的功能和性能改进。以下是升级Node.js 16到Node.js 18的步骤: 1. 确认当前Node.js版本:可以在终端中运行以下命令来检查当前安装的Node.js版本: ``` node -v ``` 2. 更新Node.js版本管理工具:如果你使用的是nvm(Node Version Manager)或者n(Node.js版本管理工具),请确保将其更新到最新版本。 3. 查看Node.js 18的变更日志:在升级之前,建议查看Node.js 18的变更日志,了解新版本中的改动和可能的兼容性问题。 4. 备份项目文件:在进行任何升级之前,建议备份你的项目文件,以防止意外情况发生。 5. 升级Node.js版本:根据你的操作系统,可以选择不同的方式来升级Node.js版本。 - 使用nvm(Node Version Manager): - 安装Node.js 18:在终端中运行以下命令来安装Node.js 18: ``` nvm install 18 ``` - 切换到Node.js 18:在终端中运行以下命令来切换到Node.js 18: ``` nvm use 18 ``` - 使用n(Node.js版本管理工具): - 安装Node.js 18:在终端中运行以下命令来安装Node.js 18: ``` n 18 ``` - 切换到Node.js 18:在终端中运行以下命令来切换到Node.js 18: ``` n use 18 ``` - 手动安装: - 下载Node.js 18的安装包:访问Node.js官方网站,下载适用于你的操作系统的Node.js 18的安装包。 - 安装Node.js 18:按照安装包的指示,完成Node.js 18的安装。 6. 验证Node.js版本:在终端中运行以下命令来验证Node.js版本是否成功升级: ``` node -v ``` 7. 更新项目依赖:在升级Node.js版本后,可能需要更新项目的依赖包。可以使用npm或者yarn等包管理工具来更新项目依赖。 8. 测试应用程序:运行你的应用程序,并进行功能测试,确保在新版本下一切正常运行。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值