返回

NodeJs或命令行爬取网络教程并生成PDF文件

前端

前言

在互联网上,有许多优秀的网络教程,但这些教程往往都是以网页的形式呈现的,这使得我们很难将其保存下来,或者在没有网络连接的情况下阅读。因此,本文将介绍如何使用NodeJs或命令行爬取网络教程并生成PDF文件,以阮一峰JavaScript教程和ES6教程为例。

使用NodeJs爬取网络教程并生成PDF文件

安装依赖

首先,我们需要安装必要的依赖。我们可以使用以下命令来安装:

npm install --save cheerio puppeteer wkhtmltopdf

编写代码

安装完成后,我们就可以编写代码了。我们可以使用以下代码来爬取阮一峰JavaScript教程并生成PDF文件:

const cheerio = require('cheerio');
const puppeteer = require('puppeteer');
const wkhtmltopdf = require('wkhtmltopdf');

async function main() {
  // 首先,我们需要创建一个Puppeteer浏览器。
  const browser = await puppeteer.launch();

  // 然后,我们需要创建一个新的页面。
  const page = await browser.newPage();

  // 接下来,我们需要导航到阮一峰JavaScript教程的首页。
  await page.goto('https://www.ruanyifeng.com/javascript/');

  // 等待页面加载完成。
  await page.waitForNavigation();

  // 使用Cheerio来解析页面内容。
  const $ = cheerio.load(await page.content());

  // 获取所有文章的链接。
  const links = $('a[href^="/javascript/"]').map((i, el) => $(el).attr('href')).get();

  // 循环遍历所有文章的链接。
  for (let i = 0; i < links.length; i++) {
    // 导航到文章的页面。
    await page.goto(`https://www.ruanyifeng.com${links[i]}`);

    // 等待页面加载完成。
    await page.waitForNavigation();

    // 使用Wkhtmltopdf将页面另存为PDF文件。
    await wkhtmltopdf.pdf(`https://www.ruanyifeng.com${links[i]}`, {
      output: `./javascript/${i}.pdf`,
    });
  }

  // 关闭浏览器。
  await browser.close();
}

main();

运行代码

运行代码后,我们会在当前目录下生成一个名为“javascript”的文件夹,其中包含了所有阮一峰JavaScript教程文章的PDF文件。

使用命令行爬取网络教程并生成PDF文件

安装依赖

首先,我们需要安装必要的依赖。我们可以使用以下命令来安装:

sudo apt install wkhtmltopdf

编写脚本

安装完成后,我们就可以编写脚本了。我们可以使用以下脚本来爬取阮一峰JavaScript教程并生成PDF文件:

#!/bin/bash

# 创建一个临时目录。
mkdir tmp

# 导航到阮一峰JavaScript教程的首页。
curl -s 'https://www.ruanyifeng.com/javascript/' > tmp/index.html

# 使用Cheerio来解析页面内容。
links=$(cat tmp/index.html | grep -oP 'href="(/javascript/[^"]+)"' | cut -d'"' -f2)

# 循环遍历所有文章的链接。
for link in $links; do
  # 导航到文章的页面。
  curl -s "https://www.ruanyifeng.com$link" > tmp/article.html

  # 使用Wkhtmltopdf将页面另存为PDF文件。
  wkhtmltopdf tmp/article.html "${link/\//-}.pdf"
done

# 删除临时目录。
rm -rf tmp

运行脚本

运行脚本后,我们会在当前目录下生成一个名为“javascript”的文件夹,其中包含了所有阮一峰JavaScript教程文章的PDF文件。

总结

以上两种方法都可以用来爬取网络教程并生成PDF文件。NodeJs方法更加灵活,但需要安装更多的依赖。命令行方法更加简单,但功能有限。我们可以根据自己的需要来选择使用哪种方法。