📜  如何在 Node.js 中使用cheerio 抓取网络数据?(1)

📅  最后修改于: 2023-12-03 15:24:17.908000             🧑  作者: Mango

如何在 Node.js 中使用 Cheerio 抓取网络数据?

背景

在 Web 开发中,常常需要从远程服务器获取数据来渲染页面,或进行分析和处理。如果直接从浏览器端发起 HTTP 请求,由于浏览器的跨域限制,很难访问到其他域名下的网页数据。因此,需要使用后端技术,通过 Node.js 向目标服务器发起 HTTP 请求,并获取响应数据。

获取到数据之后,需要将其解析成 HTML 文档,然后使用 DOM 操作技术来提取所需的信息。这时候,Cheerio 就是一个非常方便的工具。

什么是 Cheerio

Cheerio 是一个基于 Node.js 的 DOM 操作库,可以让你使用 jQuery 的语法来操作 HTML 文档。它的 API 非常简单,而且相对于 jQuery 来说,它的体积非常小,仅仅几百行代码。因此,Cheerio 是一个非常适合在 Node.js 环境中运行的 DOM 操作工具。

如何安装 Cheerio

在使用 Cheerio 之前,需要先安装它。打开终端,运行以下命令:

npm install cheerio
如何在 Node.js 中使用 Cheerio

首先,需要通过 HTTP 请求获取远程服务器的响应数据。在 Node.js 中,可以使用 httphttps 模块来发起 HTTP 请求。这里以使用 https 模块为例:

const https = require('https');

https.get('https://www.example.com/', (res) => {
  let data = '';
  res.on('data', (chunk) => {
    data += chunk;
  });
  res.on('end', () => {
    console.log(data);
  });
}).on('error', (err) => {
  console.error(err);
});

上面的代码中,使用 https 模块发起了一个 HTTPS 请求,请求的 URL 是 https://www.example.com/。当收到服务器响应时,会触发 data 事件和 end 事件,将响应数据拼接起来,并输出到控制台。

接下来,就可以使用 Cheerio 将 HTML 字符串解析成 DOM 对象,并使用 jQuery 语法来操纵它了。下面是一个简单的例子:

const https = require('https');
const cheerio = require('cheerio');

https.get('https://www.example.com/', (res) => {
  let data = '';
  res.on('data', (chunk) => {
    data += chunk;
  });
  res.on('end', () => {
    const $ = cheerio.load(data);
    console.log($('title').text());
  });
}).on('error', (err) => {
  console.error(err);
});

在这个例子中,首先通过 https 模块获取到了服务器的响应数据,然后使用 Cheerio 将响应数据解析成 DOM 对象,然后使用 jQuery 语法来获取 HTML 页面的标题,并将标题文本输出到控制台。

Cheerio 的优点和局限性

使用 Cheerio 有以下好处:

  • Cheerio 支持 jQuery 的大部分 API,因此非常容易上手。
  • Cheerio 的体积非常小,能够很好地运行在 Node.js 环境中。
  • Cheerio 已经在很多生产环境中得到了验证,因此可以放心使用。

使用 Cheerio 的时候需要注意以下局限性:

  • Cheerio 只能处理 HTML 文档,不能处理 XML 文档。
  • Cheerio 的选择器引擎相对于原版的 jQuery 来说要简单得多,因此有些高级用法可能不支持。
  • Cheerio 不支持异步加载,因此无法处理通过 AJAX 加载的数据。
总结

在本文中,我们介绍了如何在 Node.js 中使用 Cheerio 抓取网络数据,并对 Cheerio 的优点和局限性进行了分析。希望本文能够对你有所帮助。