📅  最后修改于: 2023-12-03 15:27:45.612000             🧑  作者: Mango
如果你需要从网页中爬取数据, Cheerio 是一个非常方便的 Node.js 模块,它提供了 jQuery 风格的 API,让你可以使用类似于 jQuery 的选择器语法轻松获取和操作 HTML 文档。
你可以使用 npm 安装 Cheerio:
npm install cheerio
在使用 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 可以像在 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 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 环境中进行操作,适用于各种网络爬虫程序和数据抽取任务。