天天看点

通读Cheerio文档前言APIs

cheerio文档的api我将其分为以下几个方面,包括

加载(loading)

选择器(selectors)

属性操作(attributes)

结构推导(traversing)

结构操作(manipulation)

实用方法(Miscellaneous & Utilities)

在具体讲述各个api之前,我们给出一份html代码,这份html代码将会是我们下面所有api操作的示例代码。

在使用cheerio进行各种操作之前,我们需要首先加载一份html得到一个cherrio对象。比如

因为cheerio与jquery有着极其相似的语法,所以我们一般将得到的cheerio对象命名为<code>$</code>,装作它就是jquery对象,反正基本上用法都一样。

除了<code>.load()</code>方法之外,我们还可以使用<code>$( selector, [context], [root] )</code>这个api来获得部分html节点作为cheerio对象。比如

其中第一个参数就是我们获取的目标参数。所以<code>t1</code>得到是<code>ul</code>标签封装的cheerio对象,<code>t2</code>得到是3个<code>li</code>标签封装的cheerio对象的集合。

此外,我们在加载html时还可以设置一些配置参数,比如

关于cheerio的配置,一般我们用的较少,它默认的配置如下,

cheerio的选择器基本上跟jquery拥有一致的用法。如果你熟悉jquery,那你将会倍感亲切。

其中<code>selector</code>是目标选择器,<code>context</code>是目标选择器的上下文,<code>root</code>是上下文<code>context</code>的上下文。<code>selector</code>和<code>context</code>可以是字符串表达式、dom元素、dom元素集合、cheerio对象,而<code>root</code>一般都是html文档字符串。

一般地,我们通过cheerio操作html,都是以上面的这个api得到目标元素的cheerio对象开始,然后再进行各种操作。比如

cheerio提供了操作元素属性的一系列方法。

这个方法很简单,第二个参数是可选的。当只有第一个参数时表示获取属性的值,当有带有第二个参数时,表示设置属性的值。

通过<code>name</code>移除某一个属性,同时返回被移除的这个元素。

判断某元素的<code>class</code>中是否包含<code>className</code>。

给某元素添加一个名为<code>className</code>的样式名。

将某元素上名为<code>className</code>的样式名移除。如果不存在<code>className</code>,则移除所有的样式名。

可以像使用jquery那样使用cheerio,通过某一个元素来获取它的父元素、子元素、兄弟元素等等。

在某元素下查询满足选择条件的元素。

获取某元素的父元素。

获取某元素的下一个兄弟元素。

获取某元素的上一个兄弟元素。

获取某元素的所有同级元素。(当然除了它自己)

获取某元素的孩子节点。可以传入参数在所有的孩子节点中进行筛选。

和jquery类似的<code>each</code>迭代器,对每一个元素进行处理。

和jquery类似的<code>each</code>迭代器,对每一个元素进行处理并返回一个值。

在cheerio对象集合中进行条件筛选。

获取cheerio集合中的第一个cheerio对象。

获取cheerio集合中的最后一个cheerio对象。

根据索引获取cheerio集合中的某一个对象。参数可以使负数,表示从尾部开始索引。

cheerio提供一系列修改dom结构的方法。

将<code>content</code>插入到某元素中作为该元素的最后一个子元素。

将<code>content</code>插入到某元素中作为该元素的第一个子元素。

将<code>content</code>插入到某元素的后面,并作为其后面第一个兄弟节点。

将<code>content</code>插入到某元素的前面,并作为其前面的第一个兄弟节点。

移除某一个节点以及他们的孩子节点。

替换匹配的节点。

清空一个节点,移除其所有的孩子节点。

获取某节点的html字符串。如果传入参数,则设置该元素的html结构。

获取某节点的纯文本。

将cheerio对象集合转换成真正的数据结构。

克隆一个节点。

对某一cheerio对象的根节点进行相关操作。

检查<code>container</code>中是否是否包含<code>contained</code>元素。

End! All rights reserved <code>@gejiawen</code>.

继续阅读