千家信息网

如何使用Node.js爬取任意网页资源并输出高质量PDF文件到本地

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要讲解了"如何使用Node.js爬取任意网页资源并输出高质量PDF文件到本地",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何使用Node.
千家信息网最后更新 2026年11月01日如何使用Node.js爬取任意网页资源并输出高质量PDF文件到本地

这篇文章主要讲解了"如何使用Node.js爬取任意网页资源并输出高质量PDF文件到本地",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何使用Node.js爬取任意网页资源并输出高质量PDF文件到本地"吧!

需求:

  • 使用Node.js爬取网页资源,开箱即用的配置

  • 将爬取到的网页内容以PDF格式输出

如果你是一名技术人员,那么可以看我接下来的文章,否则,请直接移步到我的github仓库,直接看文档使用即可

仓库地址:附带文档和源码,别忘了给个star哦

本需求使用到的技术:Node.js和puppeteer

  • puppeteer 官网地址: puppeteer地址

  • Node.js官网地址:链接描述

  • Puppeteer是谷歌官方出品的一个通过DevTools协议控制headless Chrome的Node库。可以通过Puppeteer的提供的api直接控制Chrome模拟大部分用户操作来进行UI Test或者作为爬虫访问页面来收集数据。

  • 环境和安装

  • Puppeteer本身依赖6.4以上的Node,但是为了异步超级好用的async/await,推荐使用7.6版本以上的Node。另外headless Chrome本身对服务器依赖的库的版本要求比较高,centos服务器依赖偏稳定,v6很难使用headless Chrome,提升依赖版本可能出现各种服务器问题(包括且不限于无法使用ssh),***使用高版本服务器。(建议使用***版本的Node.js)

小试牛刀,爬取京东资源

const puppeteer = require('puppeteer'); //  引入依赖    (async () => {   //使用async函数***异步       const browser = await puppeteer.launch();  //打开新的浏览器      const page = await browser.newPage();   // 打开新的网页       await page.goto('https://www.jd.com/');  //前往里面 'url' 的网页      const result = await page.evaluate(() => {   //这个result数组包含所有的图片src地址          let arr = []; //这个箭头函数内部写处理的逻辑            const imgs = document.querySelectorAll('img');          imgs.forEach(function (item) {              arr.push(item.src)          })          return arr       });      // '此时的result就是得到的爬虫数据,可以通过'fs'模块保存'  })()    复制过去 使用命令行命令 ` node 文件名 ` 就可以运行获取爬虫数据了   这个 puppeteer 的包 ,其实是替我们开启了另一个浏览器,重新去开启网页,获取它们的数据。
  • 上面只爬取了京东首页的图片内容,假设我的需求进一步扩大,需要爬取京东首页

中的所有 标签对应的跳转网页中的所有 title的文字内容,***放到一个数组中。

browser.newPage(), browser.close() 是固定的写法。

调用这个方法。

那意味着我们可以先进入京东网页,处理逻辑后,再次调用page.goto这个函数,

注意,上面这一切逻辑,都是puppeteer这个包帮我们在看不见的地方开启了另外一个

浏览器,然后处理逻辑,所以最终要调用browser.close()方法关闭那个浏览器。

这时候我们对上一篇的代码进行优化,爬取对应的资源。

const puppeteer = require('puppeteer');  (async () => {      const browser = await puppeteer.launch();      const page = await browser.newPage();      await page.goto('https://www.jd.com/');      const hrefArr = await page.evaluate(() => {          let arr = [];          const aNodes = document.querySelectorAll('.cate_menu_lk');          aNodes.forEach(function (item) {              arr.push(item.href)          })          return arr      });      let arr = [];      for (let i = 0; i < hrefArr.length; i++) {          const url = hrefArr[i];          console.log(url) //这里可以打印           await page.goto(url);          const result = await page.evaluate(() => { //这个方法内部console.log无效                        return  $('title').text();  //返回每个界面的title文字内容          });          arr.push(result)  //每次循环给数组中添加对应的值      }      console.log(arr)  //得到对应的数据  可以通过Node.js的 fs 模块保存到本地      await browser.close()  })()

上面有天坑 page.evaluate函数内部的console.log不能打印,而且内部不能获取外部的变量,只能return返回,

使用的选择器必须先去对应界面的控制台实验过能不能选择DOM再使用,比如京东无法使用querySelector。这里由于

京东的分界面都使用了jQuery,所以我们可以用jQuery,总之他们开发能用的选择器,我们都可以用,否则就不可以。

接下来我们直接来爬取Node.js的官网首页然后直接生成PDF

无论您是否了解Node.js和puppeteer的爬虫的人员都可以操作,请您一定万分仔细阅读本文档并按顺序执行每一步

本项目实现需求:给我们一个网页地址,爬取他的网页内容,然后输出成我们想要的PDF格式文档,请注意,是高质量的PDF文档

TIPS: 本项目设计思想就是一个网页一个PDF文件,所以每次爬取一个单独页面后,请把index.pdf拷贝出去,然后继续更换url地址,继续爬取,生成新的PDF文件,当然,您也可以通过循环编译等方式去一次性爬取多个网页生成多个PDF文件。

对应像京东首页这样的开启了图片懒加载的网页,爬取到的部分内容是loading状态的内容,对于有一些反爬虫机制的网页,爬虫也会出现问题,但是绝大多数网站都是可以的

const puppeteer = require('puppeteer');  const url = require('./url');  (async () => {      const browser = await puppeteer.launch({ headless: true })      const page = await browser.newPage()      //选择要打开的网页        await page.goto(url, { waitUntil: 'networkidle0' })      //选择你要输出的那个PDF文件路径,把爬取到的内容输出到PDF中,必须是存在的PDF,可以是空内容,如果不是空的内容PDF,那么会覆盖内容      let pdfFilePath = './index.pdf';      //根据你的配置选项,我们这里选择A4纸的规格输出PDF,方便打印      await page.pdf({          path: pdfFilePath,          format: 'A4',          scale: 1,          printBackground: true,          landscape: false,          displayHeaderFooter: false      });      await browser.close()  })()

文件解构设计

数据在这个时代非常珍贵,按照网页的设计逻辑,选定特定的href的地址,可以先直接获取对应的资源,也可以通过再次使用 page.goto方法进入,再调用 page.evaluate() 处理逻辑,或者输出对应的PDF文件,当然也可以一口气输出多个PDF文件~

感谢各位的阅读,以上就是"如何使用Node.js爬取任意网页资源并输出高质量PDF文件到本地"的内容了,经过本文的学习后,相信大家对如何使用Node.js爬取任意网页资源并输出高质量PDF文件到本地这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

网页 文件 内容 输出 地址 资源 数据 爬虫 命令 逻辑 京东 函数 输入 选择 高质量 可以通过 方法 版本 处理 文档 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 国智互联网科技 涨乐互联网科技 互联网金融 金融科技 互联网科技公司怎么样 世界互联网领先科技成果 互联网 视角下的科技创新 科技伦理 互联网公司 顺网科技2021年互联网排名 中国科技互联网公司收入 银川新华互联网科技职业技术培训学校图片 荆州市昕露互联网络科技有限公司 广州市恰铎互联网科技有限公司 华夏恒生互联网科技013171 济南有互联网科技公司吗 互联网营销推广黑科技 广州燕处互联网科技有限公司 互联网高科技行业有哪些企业 数字互联网科技有限公司 六子台科技互联网展会 广州全民伙伴互联网科技有限公司 深圳九邦互联网科技有限公司 云之行互联网科技 互联网科技官网 互联网金融 金融科技 上海致骋互联网科技 华夏互联网科技业 燊美集互联网科技有限公司 区块链结合互联网科技 中国互联网有什么科技 济南小医互联网科技有限公司招聘
0