【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 修改清单文件,主要是加入 ...
随机推荐
- weblogic部署异常: cvc-enumeration-valid: string value '3.0' is not a valid enumeration value for web-app-versionType in namespace http://java.sun.com/xml/ns/javaee:<null>
尝试使用weblogic部署一个Demo应用,在选择应用目录后,报出下面的异常: VALIDATION PROBLEMS WERE FOUND problem: cvc-enumeration-val ...
- Linux服务器压测/拷机软件收集
最近公司采购了一批服务器,于是收集了一些拷机软件来压测服务器硬件性能.硬件的稳定相对来说比较重要,7x24小时无间断运行,主要看三个硬件:CPU.内存.硬盘. 下面是收集的一些教程,可能网址已经失效了 ...
- 主动找智能钥匙 PKE取代RKE是大势所趋
http://taobao.autos.cn.yahoo.com/ypen/20111128/725214.html 近日,在车友论坛上的一个热帖<悲喜交加:1分钟就能复制汽车遥控器?>在 ...
- Delphi 调用SQL Server 2008存储过程
1.表结构如下(预算数据明细表): CREATE TABLE [dbo].[BA_FeeDetail]( [ID] [int] IDENTITY(1,1) NOT NULL, [FeeDeptID] ...
- 用Qemu模拟vexpress-a9 (七) --- 嵌入式设备上安装telnet服务
转载: http://blog.csdn.net/liuqz2009/article/details/6921789 Telnet协议是登陆远程网 络主机最简单的方法之一,只是安全性非常低.对targ ...
- 去除ArcMap连接空间数据库中多余的属性表
这个操作目前可能不具有可行性,但是为了完整性还是在下面讲一下吧.如有兴趣的小伙伴,可以按照下面的操作方式去尝试. 一.需求 去除ArcMap连接空间数据库中多余的属性表. PL/SQL中查询得到的内容 ...
- windowsmobile 开发环境
Windows Mobile 6开发环境的配置过程 需要的文件列表:1.Visual Studio 2005 Professional及更高的版本(Visual Studio 2005 Express ...
- Windows Phone 7 开发环境的搭建
本节开始进行Windows Phone 开发环境的搭建,包括所需要的操作系统及硬件的介绍,开发工具的下载与安装,以及开发工具的介绍等.由于Jake Lin老师的视频中讲解的是早期的Windows Ph ...
- 算法:冒泡排序(Bubble Sort)、插入排序(Insertion Sort)和选择排序(Selection Sort)总结
背景 这两天温习了 5 中排序算法,之前也都看过它们的实现,因为没有深入分析的缘故,一直记不住谁是谁,本文就记录一下我学习的一些心得. 三种排序算法可以总结为如下: 都将数组分为已排序部分和未排序部分 ...
- 《Windows核心编程》第1章——错误处理
GetLastError: GetLastError返回错误编码,即便出错函数后边跟随一个正确执行了的函数,也不会覆盖原先的错误代码: 考虑多线程的情况.子线程中的错误代码不会被主线程捕获: 但是子函 ...