📜  节点 |使用 Cheerio 进行网络爬取(1)

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

使用 Cheerio 进行网络爬取

如果你需要从网页中爬取数据, Cheerio 是一个非常方便的 Node.js 模块,它提供了 jQuery 风格的 API,让你可以使用类似于 jQuery 的选择器语法轻松获取和操作 HTML 文档。

安装 Cheerio

你可以使用 npm 安装 Cheerio:

npm install cheerio
获取 HTML 文档

在使用 Cheerio 之前,你需要首先将 HTML 文档加载到内存中。你可以使用 Node.js 中自带的 HTTP 模块或第三方模块(如 axios 和 request)从网站中获取 HTML 文档,具体操作如下:

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

axios.get('https://www.example.com')
  .then(response => {
    const $ = cheerio.load(response.data);
    // 接下来可以使用 $ 对象来获取和操作 HTML 文档
  })
  .catch(error => {
    console.error(error);
  });
使用 Cheerio 获取数据

使用 Cheerio 可以像在 jQuery 中一样使用选择器来获取和操作 HTML 元素。以下是一些示例:

// 获取文档中所有链接的 href 属性
const links = $('a').map((i, el) => $(el).attr('href')).get();

// 获取文档中第一个 h1 元素的文本内容
const heading = $('h1').first().text();

// 获取文档中 class 为 .header 的元素的文本内容
const headerText = $('.header').text();

除了像 jQuery 一样使用选择器, Cheerio 还提供了一些简单的 API 来查找元素,例如:

// 获取所有的 p 元素
const paragraphs = $('p');

// 获取 id 为 "content" 的元素的所有直接子元素
const contentChildren = $('#content').children();

// 获取所有 span 元素中,包含 "hello" 字符串的元素
const helloSpans = $('span:contains("hello")');
Cheerio 的 API 不同于 jQuery 的

要注意的是,Cheerio 的 API 不是完全兼容 jQuery API。例如,Cheerio 不支持所有 jQuery 的事件和效果,因此如果你需要使用这些功能,你需要使用其他的库或框架。

另外,Cheerio 在解析 HTML 文档时,会尝试自动修复 HTML 语法不规范的问题,例如:

<!-- 这是一个缺失引号的属性 -->
<img src=image.jpg>

<!-- 这是一个缺少关闭标签的元素 -->
<p>Lorem ipsum dolor sit amet

在解析时,Cheerio 会自动将它们修复为合法的 HTML 代码:

<img src="image.jpg">

<p>Lorem ipsum dolor sit amet</p>
总结

使用 Cheerio,您可以通过选择器轻松地从 HTML 文档中提取信息,并且它可以在 Node.js 环境中进行操作,适用于各种网络爬虫程序和数据抽取任务。