随着互联网的快速发展,Web 爬虫成为了获取互联网信息的重要手段之一。Node.js 作为目前流行的服务器端 JavaScript 运行环境,它的异步非阻塞特性为开发 Web 爬虫提供了很大的便利。而 Cheerio 则是一个类似于 jQuery 的解析 HTML/XML 文档的库,可以帮助我们从 HTML 文档中选择和操作元素。
本文将介绍如何在 Node.js 中使用 Cheerio 进行 Web 爬虫,并提供示例代码。
1. 安装 Cheerio
在使用 Cheerio 之前,需要先安装它。可以通过 npm 包管理工具进行安装:
npm install cheerio --save
2. 使用 Cheerio 进行 Web 爬虫
2.1. 获取页面内容
首先需要获取要爬取的网页内容,在 Node.js 中可以使用 http 或者 https 模块进行请求,也可以使用第三方的请求库。这里以使用 axios 库为例:
-- -------------------- ---- ------- ----- ----- - ----------------- ----- --- - -------------------------- ----- -------- ---------------- - --- - ----- -------- - ----- --------------- ------ -------------- - ----- ------- - --------------------- - - ---------------------------- -- - ------------------ ---
2.2. 使用 Cheerio 解析页面
获取到页面内容后,就可以使用 Cheerio 进行解析。Cheerio 的使用方式和 jQuery 很相近,我们可以像使用 jQuery 对文档进行操作一样对页面进行操作。以下是一个简单的示例代码:
-- -------------------- ---- ------- ----- ----- - ----------------- ----- ------- - ------------------- ----- --- - -------------------------- ----- -------- ---------------- - --- - ----- -------- - ----- --------------- ------ -------------- - ----- ------- - --------------------- - - ---------------------------- -- - ----- - - ------------------- ----- ----- - ------------------ ------------------- ---
上面的代码中,我们首先获得页面的 HTML 内容,然后使用 Cheerio 的 load()
方法将其加载到内存中,最后使用 $
变量来操作文档。在这个例子中,我们通过选择器 $('title')
来选择页面中的标题标签,然后使用 .text()
方法来获取标签中的文本。
2.3. 操作文档
接下来我们来看一些常见的文档操作。
- 获取元素的属性
使用 $
变量和选择器来选择元素,然后使用 attr()
方法来获取元素的属性值:
const href = $('a').attr('href'); console.log(href);
- 遍历元素
可以使用 each()
方法遍历选择器匹配到的所有元素:
$('a').each(function (i, element) { console.log($(this).attr('href')); });
- 过滤元素
可以使用 filter()
方法根据条件过滤元素:
const filteredElement = $('a').filter(function (i, element) { return $(this).attr('href').indexOf('/news/') !== -1; }); console.log(filteredElement);
- 获取元素的子元素
使用 children()
方法获取元素的所有子节点:
const children = $('div').children(); console.log(children);
- 导航到元素的父元素、兄弟元素和上一个/下一个元素
使用 parent()
方法获取元素的直接父元素,使用 next()
方法和 prev()
方法来导航到元素的下一个兄弟元素和上一个兄弟元素:
const parent = $('div').parent(); const nextSibling = $('div').next(); const prevSibling = $('div').prev(); console.log(parent); console.log(nextSibling); console.log(prevSibling);
2.4. 修改文档
除了获取文档信息,Cheerio 还可以用来修改文档。以下是一些操作示例。
- 修改元素的属性
使用 attr()
方法修改元素属性:
$('a').attr('href', 'https://www.newexample.com');
- 添加/修改元素的属性
可以在元素上使用起始标签来添加新的属性或者修改现有的属性:
$('a').attr('target', '_blank');
- 在元素前面/后面添加新元素
使用 before()
方法在元素前面添加新元素,使用 after()
方法在元素后面添加新元素:
$('<p>New paragraph</p>').before($('div')); $('<p>New paragraph</p>').after($('div'));
- 删除元素
使用 remove()
方法删除元素:
$('a').remove();
总结
本文介绍了在 Node.js 中使用 Cheerio 进行 Web 爬虫的基础知识和示例代码。通过 Cheerio 的选择器和 DOM 操作,我们可以方便地从 Web 页面中获取所需的信息,并进行一些简单的修改。同时,需要注意的是,在进行 Web 爬虫操作时,需要尊重网站的 robots.txt 规则,遵循爬虫道德规范。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6459c589968c7c53b0be30be