【Nodejs】cheerio简单示例
cheerio的API挺多,我也了解有限,欲知详情请参考 “通读cheerio API”。
下面就事论事聊聊它的基本使用。
比如说在某网页中有这么一段HTML:
</tbody> <tbody id="stickthread_8349137" class="bs_bg1" >
<tr>
<td class="icon">
<a href="chat.php?tid=8349137" title="聊天模式" target="_blank"><img src="data:images/icons/icon6.gif" alt="Icon15" class="icon" /></a>
</td>
<th class="hot" >
<label>
<img src="data:images/2008/pin_1.gif" alt="本版置顶" title="本版置顶"/>
</label>
<em>[<a href="forumdisplay.php?fid=8&filter=type&typeid=48">看盘</a>]</em> <span id="thread_8349137" class="forumdisplay"><a href="thread-8349137-1-1.html" style="font-weight: bold;color: hotpink" target="_blank"> 2018年4月25日实时看盘交流 </a></span>
<img src="data:images/attachicons/common.gif" alt="附件" title="附件" class="attach" />
<span class="threadpages"> <a href="thread-8349137-2-1.html">2</a> <a href="thread-8349137-3-1.html">3</a> <a href="thread-8349137-4-1.html">4</a> <a href="thread-8349137-5-1.html">5</a> <a href="thread-8349137-6-1.html">6</a> .. <a href="thread-8349137-14-1.html">14</a> </span>
</th>
<td class="author">
<cite>
<a href="space.php?action=viewpro&uid=2713715">美人鱼苗苗</a>
</cite>
<em class="ad_hong" >2018-4-24</em>
</td>
<td class="nums"><strong>267</strong><em>4911</em></td>
<td class="lastpost">
<cite><a href="space.php?action=viewpro&username=%D6%F1%D4%B0%C7%E5">竹园清</a></cite>
<em><a href="redirect.php?tid=8349137&goto=lastpost#lastpost"><font class="ad_hong">今天 20:33</font></a></em>
</td>
</tr>
</tbody>
注意上面代码中加粗加下划线的三个部分,它们是:
thread-8349137-1-1.html
2018年4月25日实时看盘交流
14
这三个量分别对应了帖子的地址,标题和共多少页,如果要用cheerio取到它们该如何呢,请见代码:
var buffer = Buffer.concat(html);
var body = iconv.decode(buffer,'gb2312');
var $ = cheerio.load(body); // 这个$是整个网页的dom
$("tbody").each(function(index,element){ // 先找到tody节点
var $tbody=cheerio.load($(element).html());
var topic={};
topic.pageCount=1;
topic.url=null;
topic.title=null;
$tbody(".forumdisplay a").each(function(index,element){ // 再找tbody节点里的class=forumdisplay里面的链接
var topicUrl='http://www.55188.com/'+$tbody(element).attr("href"); // 得到链接的属性(第一项)
var topicTitle=$tbody(element).text();// 得到链接的文字(第二项)
topic.url=topicUrl
topic.title=topicTitle;
})
$tbody(".threadpages").each(function(index,element){ // 再找tbody节点里的class=threadpages节点
topic.pageCount=$tbody(element).children().last().text();// 找到最后一个子节点的文字(第三项)
})
if(topic.url!=null && topic.title!=null){
topics.push(topic); // 加入数组
}
})
这样就找到了需要的三个值。
【Nodejs】cheerio简单示例的更多相关文章
- Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例
目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...
- [转]Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例
本文转自:https://www.cnblogs.com/zhongweiv/p/nodejs_koa2_webapp.html 目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装 ...
- Nodejs学习笔记(十五)—Node.js + Koa2 构建网站简单示例
前言 前面一有写到一篇Node.js+Express构建网站简单示例:http://www.cnblogs.com/zhongweiv/p/nodejs_express_webapp.html 这篇还 ...
- nodejs的简单爬虫
闲聊 好久没写博客了,前几天小颖在朋友的博客里看到了用nodejs的简单爬虫.所以小颖就自己试着做了个爬博客园数据的demo.嘻嘻...... 小颖最近养了条泰日天,自从养了我家 ...
- Linux下的C Socket编程 -- server端的简单示例
Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...
- C# 构建XML(简单示例)
C# 构建XML的简单示例: var pars = new Dictionary<string, string> { {"url","https://www. ...
- 根据juery CSS点击一个标签弹出一个遮罩层的简单示例
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- ACEXML解析XML文件——简单示例程序
掌握了ACMXML库解析XML文件的方法后,下面来实现一个比较完整的程序. 定义基本结构 xml文件格式如下 <?xml version="1.0"?> <roo ...
- demo工程的清单文件及activity中api代码简单示例
第一步注册一个账户,并创建一个应用.获取app ID与 app Key. 第二步下载sdk 第三步新建工程,修改清单文件,导入相关的sdk文件及调用相应的api搞定. 3.1 修改清单文件,主要是加入 ...
随机推荐
- 渗透测试中的bypass技巧
0x00 前言 许多朋友在渗透测试中因为遇到WAF而束手无策,本人应邀,与godkiller一同写下此文,希望能够对许多朋友的问题有所帮助. 此系列一共分为五篇文章,分别如下: 一.架构层绕过WAF ...
- [USACO11DEC]Grass Planting
题目大意: 有一棵结点个数为n的树,有m个操作,可以将一段路径上每条边的权值+1或询问某一个边的权值. 思路: 树链剖分+线段树. 轻重链划分本身比较简单,主要需要思考如何用线段树维护每条链. 当x, ...
- hdu 2197 推公式
题意:由0和1组成的串中,不能表示为由几个相同的较小的串连接成的串,称为本原串,有多少个长为n(n<=100000000)的本原串?答案mod2008.例如,100100不是本原串,因为他是由两 ...
- 批量导入--EasyPOIPOI
easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言( ...
- Python168的学习笔记7
关于多线程操作. 对于IO操作,如访问网站,写入磁盘这种需要时间等待响应的操作,多个cpu也几乎不能提高效率. 对于CPU密集型操作,如这个格式转换,可以通过多个cpu同时去进行. 但是对于pytho ...
- BZOJ5137[Usaco2017 Dec]Standing Out from the Herd
看了半天题 不知道怎么用SAM维护 于是借(chao)鉴(xi)的一发神犇的 只要判断这个子串之前被标记的记号(也就是他属于第几个串)和这次转移到的是否相同 如果不同就说明该子串属于多个串 直接标记- ...
- 【XPath Helper:chrome爬虫网页解析工具 Chrome插件】XPath Helper:chrome爬虫网页解析工具 Chrome插件下载_教程_安装 - 开发者插件 - Chrome插件网
[XPath Helper:chrome爬虫网页解析工具 Chrome插件]XPath Helper:chrome爬虫网页解析工具 Chrome插件下载_教程_安装 - 开发者插件 - Chrome插 ...
- 使用Chrome快速实现数据的抓取(五)—— puppeteer
如果要以自动化的方式驱动Chrome进行数据抓取,必须实现Chrome Dev Protocol协议的客户端.这个协议本身并不复杂,我在之前的文章中也简单的介绍过一下. Google本身有一个Node ...
- kNN(K-Nearest Neighbor)最邻近规则分类
KNN最邻近规则,主要应用领域是对未知事物的识别,即推断未知事物属于哪一类,推断思想是,基于欧几里得定理,推断未知事物的特征和哪一类已知事物的的特征最接近: K近期邻(k-Nearest Neighb ...
- Windows程序调试系列: 使用VC++生成调试信息 转
Windows程序调试系列: 使用VC++生成调试信息 ZhangTao,zhangtao.it@gmail.com, 译自 “Generating debug information with Vi ...