cheerio中文文档

htmlparser2.js:一个快速宽松的HTML/XML解析器 The fast & forgiving HTML/XML parser.(一个快速宽松的HTML/XML解析器) 阅读详情

这篇参考手册是对cheerio 官方文档 的中文翻译

cheerio是jquery核心功能的一个快速灵活而又简洁的实现,主要是为了用在服务器端需要对DOM进行操作的地方

简介

 

 

让你在服务器端和html愉快的玩耍

 

var cheerio = require('cheerio'),
    $ = cheerio.load('<h2 class = "title">Hello world</h2>');

$('h2.title').text('Hello there!');
$('h2').addClass('welcome');

$.html();
//=> <h2 class = "title welcome">Hello there!</h2>

安装

 

npm install cheerio

特点

  • 熟悉的语法:cheerio实现了jQuery的一个子集,去掉了jQuery中所有与DOM不一致或者是用来填浏览器的坑的东西,重现了jQuery最美妙的API

  • 快到没朋友:cheerio使用了及其简洁而又标准的DOM模型, 因此对文档的转换,操作,渲染都极其的高效。基本的端到端测试显示它的速度至少是JSDOM的8倍

  • 极其灵活:cheerio使用了@FB55编写的非常兼容的htmlparser2,因此它可以解析几乎所有的HTML和XML

关于JSDOM

cheerio产生的原因是出于对JSDOM的失望,主要体现在以下三点:

  • JSDOM的解析规则太过于严格:JSDOM的解析器无法处理现在许多的流行网站的内容

  • JSDOM太慢了:解析大的网站甚至可以产生可察觉的延迟

  • JSDOM太过于重量级:JSDOM的目标是提供与浏览器一样的DOM环境,但是我们往往不需要这样。我们需要的只是一种简单,熟悉的方式来操作我们的HTML

什么时候你应该用JSDOM

cheerio并非万能,当你需要一个浏览器一样的环境时,你最好还是用JSDOM,尤其是你需要进行自动化的功能测试时

API

后面的例子中用到的HTML模板如下:

 

<ul id="fruits">
  <li class="apple">Apple</li>
  <li class="orange">Orange</li>
  <li class="pear">Pear</li>
</ul>

1. 解析html(load)

首先你需要先加载你的HTML。jQuery会自动完成这一步,因为jQuery操作的DOM是固定的。但是在使用cheerio时我们要手动加载我们的HTML文档

首选的方式如下:

 

var cheerio = require('cheerio'),
$ = cheerio.load('<ul id = "fruits">...</ul>');

其次,直接把HTML字符串作为上下文也是可以的:

 

$ = require('cheerio');
$('ul', '<ul id = "fruits">...</ul>');

或者把HTML字符串作为root

 

$ = require('cheerio');
$('li', 'ul', '<ul id = "fruits">...</ul>');

如果你需要自定义一些解析选项,你可以多传递一个对象给load方法:

 

$ = cheerio.load('<ul id = "fruits">...</ul>', {
    ignoreWhitespace: true,
    xmlMode: true
});

更多的解析选项可以参考domhandler和parser-options

2. 选择器(selectors)

cheerio的选择器几乎和jQuery一模一样,所以语法上十分相像

 

$( selector, [context], [root] )

selector在context的范围内搜索,context的范围又包含在root的范围内。selector和context可以是一个字符串,DOM元素,DOM数组或者cheerio实例。root一般是一个HTML文档字符串

选择器是文档遍历和操作的起点。如同在jQuery中一样,它是选择元素节点最重要的方法,但是在jQuery中选择器建立在CSS选择器标准库上。cheerio的选择器实现了大部分的方法

 

$('.apple', '#fruits').text()
//=> Apple

$('ul .pear').attr('class')
//=> pear

$('li[class=orange]').html()
//=> <li class = "orange">Orange</li>

3. 属性操作(atrributes)

用来获取和更改属性的方法:

.attr(name, value)

这个方法用来获取和设置属性。获取第一个符合匹配的元素的属性值。如果某个属性值被设置成null,那么该属性会被移除。你也可以把map和function作为参数传递进去,就像在jQuery中一样

 

$('ul').attr('id')
//=> fruits

$('.apple').attr('id', 'favorite').html()
//=> <li class = "apple" id = "favorite">Apple</li>

更多信息请查看 http://api.jquery.com/attr/

.removeAtrr(name)

移除名为name的属性

 

$('.pear').removeAttr('class').html()
//=> <li>Pear</li>

.hasClass(className)

检查元素是否含有此类名

 

$('.pear').hasClass('pear')
//=> true

$('apple').hasClass('fruit')
//=> false

$('li').hasClass('pear')
//=> true

.addClass(className)

添加类名到所有的匹配元素,可以用函数作为参数

 

$('.pear').addClass('fruit').html()
//=> <li class = "pear fruit">Pear</li>

$('.apple').addClass('fruit red').html()
//=> <li class = "apple fruit red">Apple</li>

参见 http://api.jquery.com/addClass/

.remoteClass([className])

移除一个或者多个(空格分隔)的类名,如果className为空,则所有的类名都会被移除,可以传递函数作为参数

 

$('.pear').removeClass('pear').html()
//=> <li class = "">Pear</li>

$('.apple').addClass('red').removeClass().html()
//=> <li class = "">Apple</li>

参见 http://api.jquery.com/removeClass/

遍历

.find(selector)

在当前元素集合中选择符合选择器规则的元素集合

 

$('#fruits').find('li').length
//=> 3

.parent()

获取元素集合第一个元素的父元素

 

$('.pear').parent().attr('id')
//=> fruits

.next()

选择当前元素的下一个兄弟元素

 

$('.apple').next().hasClass('orange')
//=> true

.prev()

同.next()相反

.siblings()

获取元素集合中第一个元素的所有兄弟元素,不包含它自己

 

$('.pear').siblings().length
//=> 2

.children( selector )

.each( function(index, element) )

遍历函数返回false即可终止遍历

 

var fruits = [];

$('li').each(function(i, elem) {
  fruits[i] = $(this).text();
});

fruits.join(', ');
//=> Apple, Orange, Pear

.map( function(index, element) )

 

$('li').map(function(i, el) {
  // this === el
  return $(this).attr('class');
}).get().join(', ');
//=> apple, orange, pear

.filter( selector )

 

$('li').filter('.orange').attr('class');
//=> orange

.filter( function(index) )

 

$('li').filter(function(i, el) {
  // this === el
  return $(this).attr('class') === 'orange';
}).attr('class')
//=> orange

.first()

 

$('#fruits').children().first().text()
//=> Apple

.last()

 

$('#fruits').children().last().text()
//=> Pear

.eq( i )

缩小元素集合,可以用负数表示倒数第 i 个元素被保留

 

$('li').eq(0).text()
//=> Apple

$('li').eq(-1).text()
//=> Pear

操作DOM

操作DOM结构的方法

.append( content, [content, ...] )

.prepend( content, [content, ...] )

.after( content, [content, ...] )

 

$('.apple').after('<li class = "plum">Plum</li>')
$.html()
//=>  <ul id = "fruits">
//      <li class = "apple">Apple</li>
//      <li class = "plum">Plum</li>
//      <li class = "orange">Orange</li>
//      <li class = "pear">Pear</li>
//    </ul>

.before( content, [content, ...] )

 

$('.apple').before('<li class = "plum">Plum</li>')
$.html()
//=>  <ul id = "fruits">
//      <li class = "plum">Plum</li>
//      <li class = "apple">Apple</li>
//      <li class = "orange">Orange</li>
//      <li class = "pear">Pear</li>
//    </ul>

.remove( [selector] )

 

$('.pear').remove()
$.html()
//=>  <ul id = "fruits">
//      <li class = "apple">Apple</li>
//      <li class = "orange">Orange</li>
//    </ul>

.replaceWith( content )

 

var plum = $('<li class = "plum">Plum</li>')
$('.pear').replaceWith(plum)
$.html()
//=> <ul id = "fruits">
//     <li class = "apple">Apple</li>
//     <li class = "orange">Orange</li>
//     <li class = "plum">Plum</li>
//   </ul>

.empty()

 

$('ul').empty()
$.html()
//=>  <ul id = "fruits"></ul>

.html( [htmlString] )

 

$('.orange').html()
//=> Orange

$('#fruits').html('<li class = "mango">Mango</li>').html()
//=> <li class="mango">Mango</li>

.text( [textString] )

 

$('.orange').text()
//=> Orange

$('ul').text()
//=>  Apple
//    Orange
//    Pear

解析和渲染

 

$.html()
//=>  <ul id = "fruits">
//      <li class = "apple">Apple</li>
//      <li class = "orange">Orange</li>
//      <li class = "pear">Pear</li>
//    </ul>

输出包含自己在内的HTML(outer HTML)

 

$.html('.pear')
//=> <li class = "pear">Pear</li>

杂项

.toArray()

 

$('li').toArray()
//=> [ {...}, {...}, {...} ]

.clone()

 

var moreFruit = $('#fruits').clone()

常用工具

$.root()

 

$.root().append('<ul id="vegetables"></ul>').html();
//=> <ul id="fruits">...</ul><ul id="vegetables"></ul>

$.contains( container, contained )

 

sdio wifi 移植 介绍 简单来说,sdio起源自sd标准,顾名思义就是sd的IO接口(interface)的意思,更具体的说明,sd本来是记忆卡的标准,但是现在也可以把SD卡拿来插上一些外围设备接口使用,这个就是就叫做sdio。 而且sdio本身是一种相当单纯的技术,通过sd的IO引脚来连接外部外围,并且通过sd的IO数据接位与外围传输数据,而且sd协会也推出很完整的sdio stack 驱动程序,使得sdio外围得开发与应用变得非常热门 这里我们要移植的是RTL8822cs的sdio WiFi 模块,将其移植到rk3 阅读详情

相关推荐

Navcat最新版的激活和安装教程(全网最靠谱,最快捷的方式)

现在最新版本navcat已经出到了16.3了,并且新版navcat也支持连接redis和图标等更多样化的功能,但是比较头疼的一件事就是,只能试用14天。那么接下来小编教大家如何用最简单的方式使用最新版navcat16.

weixin_50737119的博客 2万+

探索HTMLParser2:高效解析与操作HTML的利器

[THE 0TH POSITION OF THE ORIGINAL IMAGE 在Web开发中,处理和解析HTML是常见的需求。对于JavaScript和Node.js开发者来说,`htmlparser2`是一个强大且灵活的工具,它让你能够轻松地对HTML进行读取、修改和生成。本文将深入探讨`htmlparser2`的核心特性,并展示其如何助力你的项目。 ## 项目简介 `htmlparse...

gitblog_00026的博客 1051

UFS Host Controller工作流程

contentsUFS架构图HCI接口架构传输请求接口(Transfer Request Interface)UFS 主机控制器寄存器接口(host controller Interface)UTP 层数据传输Host Software与Host Controller的交互Host Controller初始化配置与控制CRYPTOCFG 配置过程 该文档描述了UFS Host Controller的主要运作流程以及在开源内核代码hisi平台中的host controller的接口函数设计 文档大部分内容参

Frank_sample的专栏 1万+

java正则表达式去除xml标签之间的空格_HTML解析器——htmlparser2使用详解,换个姿势解析html和xml

上一篇文章我们介绍了一个html/xml解析器——htmlparser,这篇文章我们介绍另外一个解析模块htmlparser2,后者是对前者的重构,同时对前者的API做了部分兼容。用法简介安装const { Parser } = require('htmlparser2');const parser = new Parser(handler, options);parser.parseComple...

weixin_39638012的博客 406

基于bootstrap+Java的图书管理系统(任务书)

10] 倪甜弟,周晓波,王相喜.基于JSP图书馆自习室预约系统的设计与实现[J].现代计算机, 2024, 30(9):117-120.DOI:10.3969/j.issn.1007-1423.2024.09.023.[2] 陈明雪,赵勇,周小丽,等.基于Node.js和Bootstrap的图书管理系统设计与研究[J].现代信息科技, 2021, 5(24):4.[9] 杨婷婷.基于VOSviewer的图书馆管理系统研究的可视化分析[J].现代信息科技, 2023, 7(3):123-126.

毕业作品网站 647

ECU-TEST 快速入门

ECU-TEST 是由位于德国德累斯顿的TraceTronic公司开发的一款用于嵌入式系统测试验证软件工具。自从2003年首次发布ECU-TEST ,该软件成为了汽车ECU开发的标准工具 ,同时也逐步成为了重型机械和工业自动化开发的标准工具 。该软件是起源自于一个控制单元的系统化测试的项目研究,从而为从德累斯顿工业大学脱离出来的TraceTronic公司奠定了基础。ECU-TEST旨在完成测试案例的规范化、评估、求解和归档。得益于该软件包含大量的自动化测试方法使得测试案例的所有必要功能如创建、求解和评估

wangying202的博客 1万+

jquery做的nodejs小爬虫

想做个博客网站练练手,数据就打算用node爬下来,存入数据库待使用,就爬优快云博客吧。(站主勿怪~) 首先做准备工作: 1、下载请求插件request(用node内置的http模块、SuperAgent、axios或ajax都可以); 2、下载jquery; 3、单纯用jquery是获取不到标签的,因为这是在控制台输出的,jquery只能获取到浏览器标签。于是下载JSDOM模拟浏览器(也可以用P...

WINNIE小菜芽 1009

RouterOS v7.6实战:5分钟搞定IPv6双栈配置(含光猫桥接避坑指南)

本文详细解析了在RouterOS v7.6系统中配置IPv6双栈网络的实战步骤,特别针对家庭网络光猫桥接模式下的常见问题提供了避坑指南。文章涵盖了从基础配置到企业级部署的进阶内容,包括IPv6前缀获取、DHCPv6客户端设置、路由通告以及安全优化,帮助用户充分利用v7.6版本在IPv6支持上的改进与优势。

embedding5hiker的博客 1282

【Node.js 常用命令(第二篇)】揭秘Node.js:掌握这些常用命令,让你在开发路上风生水起!

承接我上一篇发的文章,我们来继续探索 Node.js 的高级工具和命令,可以深入了解一些特定用途的工具,这些工具在特定场景下非常有用,可以帮助开发者解决复杂的问题,提高开发效率。这些工具和命令覆盖了 Node.js 开发的多个高级方面,从远程服务器操作、任务调度、日志记录、网页抓取、命令行参数解析到文件上传处理、ORM 框架、身份验证、移动和桌面应用开发。掌握这些工具将帮助你构建更加健壮、高效和可维护的 Node.js 应用。

qq_70814008的博客 676

基于STM32设计的智能防盗单车锁_349

本设计基于STM32F103RCT6单片机,研制了一种适用于户外环境的智能防盗单车锁系统。系统集成了GPS定位模块、ADXL345加速度传感器、4G通信模块(Air780E)、OLED显示屏、继电器模拟锁控模块等硬件,通过姿态感知实现车辆异常移动检测,在锁车状态下自动触发蜂鸣器报警并通过短信与APP通知用户。

868

【首发独家】华为OD机试 - 服务中心选址、服务中心的最佳位置(C 语言解题)

最近更新的博客 华为 od 2023 | 什么是华为 od,od 薪资待遇,od 机试题清单 华为 OD 机试真题大全,用 Python 解华为机试题 | 机试宝典 【华为 OD 机试】全流程解析+经验分享,题型分享,防作弊指南 华为 od 机试,独家整理 已参加机试人员的实战技巧 本篇华为 OD 机试题解:服务中心选址、服务中心的最佳位置

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 1万+

cheerio 中文文档

❤ 相似的语法: cheerio实现了核心jQuery的子集。cheerio会从jQuery库中删除所有DOM矛盾和浏览器的尴尬部分,展示她真正华丽的API。 ϟ 非常快: cheerio使用一个非常简单的、一致的DOM模型。作为一个结果分析、处理和呈现的工具非常有效。基础的端到端基准测试显示其速度是JSDOM的__8x__倍。 ❁ 非常的灵活: cheerio基于 @FB55's forgiving htmlparser2。cheerio可以解析几乎任何HTML或XML文档。

slongzhang的博客 4028

手把手教你学PCIE(11.3)--pcie的认证和合规性测试

PCIe 设备的认证和合规性测试是确保设备正常工作和达到预期性能的关键步骤。通过使用 PCI-SIG 提供的测试工具和第三方测试工具,可以全面评估 PCIe 设备的物理层、链路层、事务层和互操作性,确保设备符合行业标准和规范。

MHD0815的博客 1360

3.5 cheerio文档

中文官方文档https://github.com/cheeriojs/cheerio/wiki/Chinese-README

LetsStudy的博客 364

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

从网页正文到 RAG Chunk:用 Cheerio 与 LangChain 拆解文档预处理

RAG 项目的检索质量,往往在向量化之前就已经被“抓什么、怎么切”决定了。本文基于一个 Node.js 学习示例,拆解网页正文提取、LangChain。

2501_93234401的博客 326

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

nodejs在某一段加入html代码,nodejs cheerio模块提取html页面内容(示例代码)

提取问题文本的整体思路:先找到包含题目的所有元素,然后再获取这些元素的内容即可。 通过chrome的devtool(或者firefox的firebug)看出,所有的目标元素为:hr元素的所有兄弟结点。cheerio的nextAll函数满足需求,这个函数获取当前结点的所有后续的兄弟结点。程序如下:var fs = require(\'fs\');var cheerio = require(\'che...

weixin_42524750的博客 434

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

1.cheerio-解析几乎任何HTML或XML文档

NodeJs爬虫-如何用cheerio来解析HTML抓取有效数据,也就是所谓的爬虫

NR赧然的猪窝 1257

3步实现HTML到Word完美转换:从格式混乱到高效办公的转型指南

王律师的眉头又皱了起来。作为金融公司的法务主管,他每周需要将线上合同模板(HTML格式)转换为Word文档供客户签署。但每次转换都像一场"格式灾难":精心设计的表格边框消失、条款编号错乱、公司Logo变成破碎图标,最严重的一次甚至导致关键条款排版错误差点引发法律风险。团队不得不在每次转换后花费2小时手动调整格式,而这种重复劳动每周要占用12个工时。 这不是个例。在金融、医疗、教育等行业,HTML

gitblog_00160的博客 436

【亲测免费】 Cheerio 技术文档

### 1.1 使用 npm 安装 要安装 Cheerio,请在终端中运行以下命令: ```bash npm install cheerio ``` ### 1.2 使用 Yarn 安装 如果你使用 Yarn 作为包管理器,可以使用以下命令进行安装: ```bash yarn add cheerio ``` ## 2. 项目使用说明 ### 2.1 加载 HTML 首先,你需要加载...

gitblog_01258的博客 1063

openGraphScraper 与 Cheerio 集成:深度解析 HTML 解析原理

openGraphScraper 是一款强大的 Node.js 元数据解析工具,通过与 Cheerio 库的深度集成,实现了对网页 Open Graph 信息及其他关键元数据的高效提取。本文将全面解析两者的集成原理,帮助开发者理解 HTML 解析的核心技术与实现方式。 ## Cheerio 基础:轻量级 HTML 解析引擎 Cheerio 作为 jQuery 的服务器端实现,为 openGra

gitblog_00936的博客 966

cheerio获取outerHTML

cheerio作为node中jquery的替代品,拥有与jquery相似的api,甚至连详细文档的地址都指向api.jquery.com。但是由于执行环境的关系,并没有完全继承jquery中的方法。 对于这样的页面 <html> <head></head> <body> <ul id="fruits"> <li>...

nayi_224的博客 1348

cheerio - 服务端的 jQuery

快速,灵活,精简,专为 node.js 服务端设计的 jQuery 核心   var cheerio = require('cheerio'), $ = cheerio.load('Hello world'); $('h2.title').text('Hello there!'); $('h2').addClass('welcome'); $.html(); //=> Hell

mg1616的专栏 548

第五章 Electron|Node 使用cheerio 爬虫

Cheerio是一个快速、灵活且精益的jQuery核心实现,用于在Node.js环境中解析HTML文档。它可以帮助您在服务器端轻松地从HTML文档中提取数据,比如从网页中提取文章标题、内容、图片等信息。

Wait.End的博客 2999

Cheerio文档加载方法全面解析:从入门到精通

Cheerio作为Node.js环境下优秀的HTML/XML解析库,其核心功能之一就是能够将各种格式的文档加载为可操作的DOM结构。本文将深入讲解Cheerio提供的五种文档加载方法,帮助开发者根据不同的使用场景选择最合适的加载方式。 ## 基础加载方法:load `load`方法是Cheerio最基础也是最常用的文档加载方式,它接受一个HTML/XML字符串作为输入,返回一个可操作的Chee...

gitblog_00772的博客 501

cheerio为nodejs定制的JQuery。

什么是cheerio?cheerio 是nodejs特别为服务端定制的,能够快速灵活的对JQuery核心进行实现。它工作于DOM模型上,且解析、操作、呈送都很高效。

Dimikart的博客 1722
上一篇: js 方法的动态调用 apply的用法
下一篇: [IPA]IOS In App Purchase(内购)验证
THMAIL
博客等级 码龄10年 2435粉丝 432原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值