如何运行JavaScript文件?新手如何抓取指定博客文章链接生成PDF?
手把手教你运行JS爬虫代码并生成博客文章PDF(零基础友好)
嘿,兄弟,既然你完全不懂JavaScript,那我就从最基础的环节一步步给你讲,保证你能跟着操作下来,搞定抓取博客文章链接并生成PDF的需求!
第一步:先搞定运行JS文件的基础环境
这段代码是基于Node.js运行的(Node.js是让我们能在电脑上跑JavaScript的工具),所以首先得把它装上:
- 去Node.js官网下载对应你电脑系统的安装包,一路点「下一步」安装就行。
- 安装完后,打开你的终端(Windows用命令提示符/Powershell,Mac用自带的终端),输入
node -v和npm -v,如果能显示版本号,说明安装成功了。
第二步:准备你的代码和依赖
- 新建工作文件夹:在电脑上随便找个地方(比如桌面)新建一个文件夹,起名比如
mmm-blog-scraper,方便后续操作。 - 创建代码文件:在这个文件夹里新建一个文本文件,重命名为
scraper.js,把补全后的完整代码粘贴进去。 - 安装代码需要的工具包:打开终端,输入
cd 你的文件夹路径(比如Windows是cd C:\Users\你的名字\Desktop\mmm-blog-scraper,Mac是cd ~/Desktop/mmm-blog-scraper),进入文件夹后,输入下面的命令安装依赖:
解释一下:npm install node-fetch cheerio puppeteernode-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
相关产品推荐
相关产品推荐

