返回

初战告捷,Node.js小说爬虫小试牛刀!

前端

一个新手也能学会的Node.js小说爬虫

作为一名初学者,我一直在寻找新的方法来挑战自己并提高我的技术能力。最近,我对爬虫技术产生了兴趣,因此决定用Node.js开发一个小爬虫来试试水。本文将记录我的学习过程和经验,希望对其他想要学习爬虫技术的新手有所帮助。

准备工作

在开始之前,我们需要先安装好Node.js和必要的模块。以下是一些必备的模块:

  • request:用于发送HTTP请求
  • cheerio:用于解析HTML页面
  • fs:用于读写文件

选择目标网站

为了练习爬虫技术,我决定选择一个简单的目标网站来开始。这次我选择的目标网站是一个提供免费小说阅读的网站。

获取小说目录页面

首先,我们需要获取小说目录页面。我们可以使用request模块发送一个HTTP请求到小说的目录页面,并使用cheerio模块来解析HTML页面。

获取小说所有章节页面地址

接下来,我们需要获取小说所有章节的页面地址。我们可以使用cheerio模块来查找目录页面中指向章节页面的链接,然后将这些链接保存到一个数组中。

使用request获取章节信息

现在,我们可以使用request模块来获取每个章节的页面内容。我们可以在每个章节页面中使用cheerio模块来解析HTML页面,并提取出章节标题、章节内容等信息。

使用fs保存小说内容

最后,我们可以使用fs模块将小说内容保存到一个文件中。我们可以创建一个新的文本文件,然后将小说标题、章节标题和章节内容写入文件中。

运行爬虫

现在,我们已经完成了爬虫的开发,我们可以运行爬虫来抓取小说内容。我们可以使用Node.js的命令行界面来运行爬虫。

总结

通过这个简单的爬虫项目,我学习了如何使用Node.js来开发爬虫。我了解了如何发送HTTP请求、解析HTML页面和保存文件等基本爬虫技术。我希望这个项目对其他想要学习爬虫技术的新手有所帮助。

附录

完整代码

const request = require('request');
const cheerio = require('cheerio');
const fs = require('fs');

// 目标网站的URL
const targetUrl = 'https://www.example.com/novel/12345';

// 获取小说目录页面
request(targetUrl, (error, response, body) => {
  if (error) {
    console.error(error);
    return;
  }

  // 解析HTML页面
  const $ = cheerio.load(body);

  // 获取小说标题
  const title = $('h1').text();

  // 获取所有章节的页面地址
  const chapterUrls = [];
  $('.chapter-list a').each((i, elem) => {
    chapterUrls.push($(elem).attr('href'));
  });

  // 使用request获取章节信息
  const chapters = [];
  chapterUrls.forEach((chapterUrl) => {
    request(chapterUrl, (error, response, body) => {
      if (error) {
        console.error(error);
        return;
      }

      // 解析HTML页面
      const $ = cheerio.load(body);

      // 获取章节标题和章节内容
      const chapterTitle = $('h2').text();
      const chapterContent = $('.content').text();

      // 将章节标题和章节内容保存到数组中
      chapters.push({
        title: chapterTitle,
        content: chapterContent,
      });
    });
  });

  // 使用fs保存小说内容
  fs.writeFile(`${title}.txt`, chapters.join('\n\n'), (error) => {
    if (error) {
      console.error(error);
      return;
    }

    console.log('小说已保存到文件');
  });
});

运行爬虫

node crawler.js