前言
Puppeteer 是一款由 Google 开发的 Node.js 库,通过它可以实现自动化控制 Chrome 或者 Chromium 浏览器的能力。Puppeteer 在前端自动化测试、网页截图、UI测试以及 Web 爬虫等方面拥有广泛的应用。
而 Deno 是一款 JavaScript 和 TypeScript 运行时,它具有可持续的性能、安全性和开发者友好性等优点,越来越受到前端开发者的关注。那么在 Deno 中如何使用 Puppeteer 进行 Web 爬虫呢?
本文将详细介绍如何在 Deno 中使用 Puppeteer 进行 Web 爬虫,并提供示例代码供读者参考。
环境准备
在进行 Puppeteer 爬虫之前,需要先安装以下环境:
- Deno 运行时:可以通过官网提供的安装脚本进行安装;
- Puppeteer:可以通过 npm 进行安装,在终端输入
npm i puppeteer
即可。
Puppeteer 的基本使用
下面我们来介绍 Puppeteer 的基本使用,包括浏览器的启动、页面的访问、元素的定位等。
浏览器启动
启动浏览器可以使用 puppeteer.launch()
方法,如下所示:
import puppeteer from "puppeteer"; (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto("https://www.baidu.com"); await browser.close(); })();
在这个示例中,我们使用 puppeteer.launch()
方法启动了一个浏览器实例,并使用 browser.newPage()
方法打开一个新的页面,之后使用 page.goto()
方法跳转到百度搜索页面。
页面访问
访问页面也很简单,可以使用 page.goto()
方法,如下所示:
await page.goto("https://www.baidu.com");
这行代码将会访问百度搜索页面。如果需要访问其他页面,只需要将 URL 修改即可。
元素定位
元素定位可以使用 page.$(selector)
方法,该方法返回一个 ElementHandle
对象,可以使用该对象来执行元素操作。如下所示:
const inputElement = await page.$("#kw"); await inputElement.type("Hello World!");
在这个示例中,我们首先使用 page.$()
方法定位到 ID 为 #kw
的输入框,然后使用 .type("Hello World!")
方法往输入框中输入内容。注意,这里的输入框是有一个 name
属性的,如果在 HTML 中不存在 name
属性,那么就需要使用 page.$$(selector)
方法来取得一个数组,再通过索引来定位元素。
在 Deno 中使用 Puppeteer 进行 Web 爬虫
了解了 Puppeteer 的基本使用,现在我们可以使用 Puppeteer 来进行 Web 爬虫了。下面提供一个示例代码,该代码可以访问百度搜索页面,搜索 Deno
关键字,并将搜索结果的标题和 URL 输出到控制台。
import puppeteer from "puppeteer"; (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto("https://www.baidu.com"); await page.type("#kw", "Deno"); await page.click("#su"); await page.waitForSelector("#content_left"); const resultLinks = await page.$$eval( "#content_left .t a", (links) => links.map((link) => ({ title: link.innerText, url: link.href })) ); console.log(resultLinks); await browser.close(); })();
这里使用 page.type()
方法向搜索框中输入 Deno
关键字,在输入完关键字后使用 page.click()
方法点击搜索按钮。在搜索结果加载完成后,我们使用 page.waitForSelector()
等待搜索结果出现,如果搜索结果长时间没有出现,将会超时报错。之后使用 page.$$eval()
方法定位到搜索结果的标题和 URL,并使用 .map()
方法将结果映射为一个对象,最后将结果输出到控制台。
总结
本文介绍了如何在 Deno 中使用 Puppeteer 进行 Web 爬虫,包括环境准备、Puppeteer 的基本使用和示例代码。希望读者们能够掌握在 Deno 中使用 Puppeteer 进行 Web 爬虫的技能,为日常工作和学习带来便利。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/659e1ecaadd4f0e0ff732ecb