Puppeteer 使用教程-实战篇(爬取图片、视频、音频,页面数据)
发布人:shili8
发布时间:2025-02-08 04:02
阅读次数:0
**Puppeteer 使用教程-实战篇**
Puppeteer 是一个 Node.js 库,用于控制 Chrome 浏览器。它可以用来爬取网页内容、执行 JavaScript代码、截图等功能。在本文中,我们将介绍如何使用 Puppeteer 实现一些常见的任务,如爬取图片、视频、音频和页面数据。
### 安装 Puppeteer首先,需要安装 Puppeteer 库。可以通过以下命令进行安装:
bashnpm install puppeteer
### 爬取图片下面是一个例子,展示如何使用 Puppeteer 爬取网页上的图片:
javascriptconst puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); // 指定爬取的 URL await page.goto(' /> // 等待页面加载完成 await page.waitForNavigation({ waitUntil: 'networkidle0' }); // 获取所有图片元素 const images = await page.$$('img'); // 将图片下载到本地 for (const image of images) { const src = await image.getAttribute('src'); if (src) { const filename = src.split('/').pop(); await page.goto(src); await page.screenshot({ path: `./${filename}`, type: 'png' }); } } // 关闭浏览器 await browser.close(); })();
### 爬取视频爬取视频的过程与爬取图片类似,但是需要注意的是,视频可能需要下载整个文件,而不是像图片那样直接截图。下面是一个例子:
javascriptconst puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); // 指定爬取的 URL await page.goto(' /> // 等待页面加载完成 await page.waitForNavigation({ waitUntil: 'networkidle0' }); // 获取视频元素 const video = await page.$('video'); // 下载视频 const filename = 'video.mp4'; const filePath = `./${filename}`; const fs = require('fs'); const stream = await page.evaluateHandle(() => { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.onloadend = () => resolve(reader.result); reader.onerror = () => reject(reader.error); reader.readAsArrayBuffer(video.srcElement); }); }); const videoBuffer = await stream.jsonValue(); fs.writeFileSync(filePath, Buffer.from(videoBuffer)); // 关闭浏览器 await browser.close(); })();
### 爬取音频爬取音频的过程与爬取视频类似,但是需要注意的是,音频可能需要下载整个文件,而不是像图片那样直接截图。下面是一个例子:
javascriptconst puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); // 指定爬取的 URL await page.goto(' /> // 等待页面加载完成 await page.waitForNavigation({ waitUntil: 'networkidle0' }); // 获取音频元素 const audio = await page.$('audio'); // 下载音频 const filename = 'audio.mp3'; const filePath = `./${filename}`; const fs = require('fs'); const stream = await page.evaluateHandle(() => { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.onloadend = () => resolve(reader.result); reader.onerror = () => reject(reader.error); reader.readAsArrayBuffer(audio.srcElement); }); }); const audioBuffer = await stream.jsonValue(); fs.writeFileSync(filePath, Buffer.from(audioBuffer)); // 关闭浏览器 await browser.close(); })();
### 爬取页面数据下面是一个例子,展示如何使用 Puppeteer 爬取网页上的数据:
javascriptconst puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); // 指定爬取的 URL await page.goto(' /> // 等待页面加载完成 await page.waitForNavigation({ waitUntil: 'networkidle0' }); // 获取所有元素 const elements = await page.$$('*'); // 将数据下载到本地 for (const element of elements) { const text = await element.textContent(); if (text) { console.log(text); } } // 关闭浏览器 await browser.close(); })();
### 总结在本文中,我们介绍了如何使用 Puppeteer 实现一些常见的任务,如爬取图片、视频、音频和页面数据。这些例子展示了如何使用 Puppeteer 的 API 来控制 Chrome 浏览器,执行 JavaScript代码,并下载网页内容。