如何在 Deno 中使用 Puppeteer 进行 Web 爬虫?

前言

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


纠错反馈