Node & Cheerio & WebStorm 学习实验
准备用cheerio去抓一些网页看看。
可以参考的材料有:
http://www.cnblogs.com/CraryPrimitiveMan/p/3674421.html
http://cnodejs.org/topic/5203a71844e76d216a727d2e
首先打开WebStorm,新建一个空项目,名为HelloWorld,然后在主目录新建一个HelloWorld.js,内容
console.log("Hello World");
然后直接Run,命令行会自动调用node命令来运行:
/usr/local/bin/node /Users/baidu/Documents/Data/Work/Code/Self/nodejs/helloworld/HelloWorld.js
Hello World! Process finished with exit code 0
主要是看这个url上面的例子:
http://www.cnblogs.com/CraryPrimitiveMan/p/3674421.html
先安装一下cheerio
npm install cheerio
先写了个curl.js,代码如下:
/**
* Created by baidu on 16/10/17.
*/
var http = require("http"); function download(url, callback) {
var data = '';
http.get(url, function(res) {
res.on('data', function(chunk) {
data += chunk;
});
res.on('end', function () {
callback(data);
});
}).on('error', function () {
callback('error');
})
} exports.download = download;
然后主程序HelloWorld.js中引用该函数:
/**
* Created by baidu on 16/10/17.
*/ console.log("Hello World"); var cheerio = require('cheerio');
var curl = require('./curl');
var iconv = require('iconv-lite'); var url = 'http://open.163.com/special/opencourse/englishs1.html'; curl.download(url, function (data) {
if (data) {
var $ = cheerio.load(data);
$('a.downbtn').each(function (i, e) {
var str = $(e).attr('data-name');
console.log(str);
});
console.log('done');
}
else {
console.log('error');
}
});
但是结果都是乱码。。
上网查发现需要使用 iconv-lite 包,在引入这个包之后:
var str = $(e).attr('data-name');
str = iconv.decode(str, 'gbk');
发现报错,并且提示查阅:
https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding
原来是在 data += chunk的时候,已经发生的默认针对utf-8的转码,使得文字的码发生了混乱。
按照上文中给出的例子,使用chunks数组存数组,然后使用Buffer.concat合并数组的内容。修改了以上两个文件的代码,curl.js:
/**
* Created by baidu on 16/10/17.
*/
var http = require("http"); function download(url, callback) {
var chunks = [];
http.get(url, function(res) {
res.on('data', function(chunk) {
chunks.push(chunk);
});
res.on('end', function () {
callback(chunks);
});
}).on('error', function () {
callback(chunks);
})
} exports.download = download;
HelloWorld.js:
/**
* Created by baidu on 16/10/17.
*/ console.log("Hello World"); var cheerio = require('cheerio');
var curl = require('./curl');
var iconv = require('iconv-lite'); var url = 'http://open.163.com/special/opencourse/englishs1.html'; curl.download(url, function (chunks) {
if (chunks) {
var data = iconv.decode(Buffer.concat(chunks), 'gbk');
var $ = cheerio.load(data);
$('a.downbtn').each(function (i, e) {
var str = $(e).attr('data-name');
console.log(str);
});
console.log('done');
}
else {
console.log('error');
}
});
然后运行,得到如下结果:
/usr/local/bin/node /Users/baidu/Documents/Data/Work/Code/Self/nodejs/helloworld/HelloWorld.js
Hello World
新西兰国立南方理工学院公开课:英语强化课程I > be动词、冠词、指示代词、情态动词、一般现在时
新西兰国立南方理工学院公开课:英语强化课程I > 可数名词、不可数名词、不定代词、形容词比较级、最高级、一般过去时、现在进行时
新西兰国立南方理工学院公开课:英语强化课程I > 形态动词、疑问词、常用的时间短语
新西兰国立南方理工学院公开课:英语强化课程I > 如何询问价格和质量、疑问句词序、人称代词如何配搭动词、不同时态中的时间短语
新西兰国立南方理工学院公开课:英语强化课程I > 过去式中动词的用法、如何使用定冠词
新西兰国立南方理工学院公开课:英语强化课程I > 动名词、一般现在时与一般过去时中的被动语态、过去完成时、虚拟条件句
新西兰国立南方理工学院公开课:英语强化课程I > 四种形态的助动词、一般现在时、现在进行时、规则动词与不规则动词、现在完成时、现在完成进行时
新西兰国立南方理工学院公开课:英语强化课程I > 将来时、将来时从句、特殊形容词、主动句与被动句、礼貌请求用语
新西兰国立南方理工学院公开课:英语强化课程I > 预测、过去完成时、间接引语、义务和许可、虚拟语气
新西兰国立南方理工学院公开课:英语强化课程I > 各种动词形式、助动词、名词后缀、形容词后缀、单词前缀、陈述句、现在进行时
新西兰国立南方理工学院公开课:英语强化课程I > be动词、冠词、指示代词、情态动词、一般现在时
新西兰国立南方理工学院公开课:英语强化课程I > 可数名词、不可数名词、不定代词、形容词比较级、最高级、一般过去时、现在进行时
新西兰国立南方理工学院公开课:英语强化课程I > 形态动词、疑问词、常用的时间短语
新西兰国立南方理工学院公开课:英语强化课程I > 如何询问价格和质量、疑问句词序、人称代词如何配搭动词、不同时态中的时间短语
新西兰国立南方理工学院公开课:英语强化课程I > 过去式中动词的用法、如何使用定冠词
新西兰国立南方理工学院公开课:英语强化课程I > 动名词、一般现在时与一般过去时中的被动语态、过去完成时、虚拟条件句
新西兰国立南方理工学院公开课:英语强化课程I > 四种形态的助动词、一般现在时、现在进行时、规则动词与不规则动词、现在完成时、现在完成进行时
新西兰国立南方理工学院公开课:英语强化课程I > 将来时、将来时从句、特殊形容词、主动句与被动句、礼貌请求用语
新西兰国立南方理工学院公开课:英语强化课程I > 预测、过去完成时、间接引语、义务和许可、虚拟语气
新西兰国立南方理工学院公开课:英语强化课程I > 各种动词形式、助动词、名词后缀、形容词后缀、单词前缀、陈述句、现在进行时
新西兰国立南方理工学院公开课:英语强化课程I > 复习四种时态、一般现在时、完成时、冠词、关系代词、量词、动名词、不定式、连词
新西兰国立南方理工学院公开课:英语强化课程I > 情态动词及其过去式、将来时、将来进行时、将来完成时、虚拟语气及其过去式、间接引语
done Process finished with exit code 0
Node & Cheerio & WebStorm 学习实验的更多相关文章
- node.js + webstorm :配置开发环境
一.配置开发环境: 1.先安装node (1).访问http://nodejs.org打开安装包,正常安装,点击next即可. 为了测试是否安装成功,打开命令提示符,输入node,则进入node.js ...
- 【干货分享】Node.js 中文学习资料和教程导航
这篇文章来自 Github 上的一位开发者收集整理的 Node.js 中文学习资料和教程导航.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念,它的目标是帮助程 ...
- OpenState之 Mac学习 实验
OpenState之 Mac学习 实验 目录 OpenState安装 Port Knocking 实验 Mac Learning 实验 环境要求: 系统ubuntu 14.04 mininet:2.3 ...
- 常用增强学习实验环境 II (ViZDoom, Roboschool, TensorFlow Agents, ELF, Coach等) (转载)
原文链接:http://blog.csdn.net/jinzhuojun/article/details/78508203 前段时间Nature上发表的升级版Alpha Go - AlphaGo Ze ...
- Node.js 中文学习资料和教程导航
这篇文章来自 Github 上的一位开发者收集整理的 Node.js 中文学习资料和教程导航.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念,它的目标是帮助程 ...
- Node.js知识点学习
Node.js知识点学习 一.基本概念 Node.js,或者 Node,是一个可以让 JavaScript 运行在服务器端的平台.可以说,Node.js开创了javascript模块化开发的先河,早期 ...
- node的重点学习笔记(1)————node
node的重点学习笔记(1)----node 提到node就必须提一下他的npm了,npm是世界上最大的开放源代码的生态系统.通俗来说这就如同亚马逊丛林,要啥物种有啥物种,一个巨大的生态圈,里面有一堆 ...
- ELK学习实验014:Nginx日志JSON格式收集
1 Kibana的显示配置 https://demo.elastic.co/app/kibana#/dashboard/welcome_dashboard 环境先处理干净 安装nginx和httpd- ...
- Node.js的学习--使用cheerio抓取网页数据
打算要写一个公开课网站,缺少数据,就决定去网易公开课去抓取一些数据. 前一阵子看过一段时间的Node.js,而且Node.js也比较适合做这个事情,就打算用Node.js去抓取数据. 关键是抓取到网页 ...
随机推荐
- 关于springMVC转换json出现的异常
jackson-core-asl-1.9.0.jar,jackson-mapper-asl-1.9.0.jar两个包 并且在controller中有如下代码 @RequestMapping(value ...
- 深度学习方法:受限玻尔兹曼机RBM(二)网络模型
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入 上解上一篇RBM(一)基本概念, ...
- python math模块
import math math. ceil:取大于等于x的最小的整数值,如果x是一个整数,则返回x copysign:把y的正负号加到x前面,可以使用0 cos:求x的余弦,x必须是弧度 degre ...
- Integer to Roman——相当于查表法
Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 t ...
- Vuex ~ 初识
状态:data中的属性需要共享给其他vue组件使用的部分(即data中需要共用的属性) 1.初识vuex直接来个小demo 下面操作都是基于vue-cli,如果不了解先学习下vue-cli 利用n ...
- python实现RabbitMQ同步跟异步消费模型
1,消息推送类 import pika # 同步消息推送类 class RabbitPublisher(object): # 传入RabbitMQ的ip,用户名,密码,实例化一个管道 def __in ...
- 文件还原工具Foremost
文件还原工具Foremost 在数字取证中,通过对设备备份,可以获取磁盘镜像文件.通过分析镜像文件,可以获取磁盘存在的数据.但是很多重要数据往往已被删除.这个时候,就需要还原这些文件.Kali L ...
- java 抽象方法 能用 静态 static 修饰,或者 native 修饰 么
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha static与abstract不能同时使用 用static声明方法表明这个方法在不生成类 ...
- 2017 Multi-University Training 1 解题报告
Add More Zero Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)T ...
- 背包系列练习及总结(hud 2602 && hdu 2844 Coins && hdu 2159 && poj 1170 Shopping Offers && hdu 3092 Least common multiple && poj 1015 Jury Compromise)
作为一个oier,以及大学acm党背包是必不可少的一部分.好久没做背包类动规了.久违地练习下-.- dd__engi的背包九讲:http://love-oriented.com/pack/ 鸣谢htt ...