You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何运行JavaScript文件?新手如何抓取指定博客文章链接生成PDF?

手把手教你运行JS爬虫代码并生成博客文章PDF(零基础友好)

嘿,兄弟,既然你完全不懂JavaScript,那我就从最基础的环节一步步给你讲,保证你能跟着操作下来,搞定抓取博客文章链接并生成PDF的需求!

第一步:先搞定运行JS文件的基础环境

这段代码是基于Node.js运行的(Node.js是让我们能在电脑上跑JavaScript的工具),所以首先得把它装上:

  • 去Node.js官网下载对应你电脑系统的安装包,一路点「下一步」安装就行。
  • 安装完后,打开你的终端(Windows用命令提示符/Powershell,Mac用自带的终端),输入node -v和npm -v,如果能显示版本号,说明安装成功了。

第二步:准备你的代码和依赖

  1. 新建工作文件夹:在电脑上随便找个地方(比如桌面)新建一个文件夹,起名比如mmm-blog-scraper,方便后续操作。
  2. 创建代码文件:在这个文件夹里新建一个文本文件,重命名为scraper.js,把补全后的完整代码粘贴进去。
  3. 安装代码需要的工具包:打开终端,输入cd 你的文件夹路径(比如Windows是cd C:\Users\你的名字\Desktop\mmm-blog-scraper,Mac是cd ~/Desktop/mmm-blog-scraper),进入文件夹后,输入下面的命令安装依赖:
    npm install node-fetch cheerio puppeteer
    
    解释一下:node-fetch用来抓取网页内容,cheerio用来解析网页结构,puppeteer用来生成PDF。

第三步:完整的爬虫+生成PDF代码(补全你截断的部分)

你之前贴的代码是不完整的,我给你补全了完整的逻辑,能自动抓取所有分页的文章链接,然后生成每篇文章的PDF:

const fs = require('fs');
const EventEmitter = require('events').EventEmitter;
const fetch = require('node-fetch');
const cheerio = require('cheerio');
const puppeteer = require('puppeteer');

const baseUrl = 'https://www.mrmoneymustache.com';
const e = new EventEmitter();
const articleLinks = [];

// 抓取单页的文章链接
e.on('fetchPage', async link => {
  try {
    const response = await fetch(link);
    const html = await response.text();
    const $ = cheerio.load(html);

    // 解析文章链接(如果博客页面结构变了,需要调整这里的选择器)
    $('.post-title a').each((i, el) => {
      const articleUrl = $(el).attr('href');
      const fullUrl = articleUrl.startsWith('http') ? articleUrl : `${baseUrl}${articleUrl}`;
      if (!articleLinks.includes(fullUrl)) {
        articleLinks.push(fullUrl);
        console.log(`找到文章:${fullUrl}`);
      }
    });

    // 检查是否有下一页,有的话继续抓取
    const nextPageLink = $('.pagination-next a').attr('href');
    if (nextPageLink) {
      const nextFullUrl = nextPageLink.startsWith('http') ? nextPageLink : `${baseUrl}${nextPageLink}`;
      e.emit('fetchPage', nextFullUrl);
    } else {
      // 所有页面抓取完成,开始生成PDF
      await generatePDFs(articleLinks);
      console.log('所有文章PDF已生成!');
    }
  } catch (error) {
    console.error(`抓取页面出错:${link}`, error);
  }
});

// 批量生成文章PDF
async function generatePDFs(links) {
  const browser = await puppeteer.launch({ headless: 'new' });
  for (const link of links) {
    try {
      const page = await browser.newPage();
      await page.goto(link, { waitUntil: 'networkidle2' }); // 等页面加载完成
      // 生成安全的文件名(去掉特殊字符)
      const title = await page.title();
      const safeTitle = title.replace(/[<>:"/\\|?*]/g, '_');
      // 生成PDF
      await page.pdf({
        path: `./${safeTitle}.pdf`,
        format: 'A4',
        printBackground: true // 保留页面背景样式
      });
      await page.close();
      console.log(`已生成:${safeTitle}.pdf`);
    } catch (error) {
      console.error(`生成PDF失败:${link}`, error);
    }
  }
  await browser.close();
}

// 启动爬虫,从博客首页开始
e.emit('fetchPage', baseUrl);

第四步:运行代码并查看结果

在终端里,确保你在刚才的文件夹下,输入命令:

node scraper.js

然后就等着就行!程序会先抓取所有的文章链接,然后逐个生成PDF,生成的文件都会存在你的工作文件夹里。

小提示

如果发现没抓到文章,大概率是博客的页面结构变了——你可以右键博客页面→「检查」,找到文章标题的HTML元素,把代码里的.post-title a换成对应的选择器就行;下一页的选择器同理。

内容的提问来源于stack exchange,提问作者Anon1378937

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:50:06