准备用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 学习实验的更多相关文章

  1. node.js + webstorm :配置开发环境

    一.配置开发环境: 1.先安装node (1).访问http://nodejs.org打开安装包,正常安装,点击next即可. 为了测试是否安装成功,打开命令提示符,输入node,则进入node.js ...

  2. 【干货分享】Node.js 中文学习资料和教程导航

    这篇文章来自 Github 上的一位开发者收集整理的 Node.js 中文学习资料和教程导航.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念,它的目标是帮助程 ...

  3. OpenState之 Mac学习 实验

    OpenState之 Mac学习 实验 目录 OpenState安装 Port Knocking 实验 Mac Learning 实验 环境要求: 系统ubuntu 14.04 mininet:2.3 ...

  4. 常用增强学习实验环境 II (ViZDoom, Roboschool, TensorFlow Agents, ELF, Coach等) (转载)

    原文链接:http://blog.csdn.net/jinzhuojun/article/details/78508203 前段时间Nature上发表的升级版Alpha Go - AlphaGo Ze ...

  5. Node.js 中文学习资料和教程导航

    这篇文章来自 Github 上的一位开发者收集整理的 Node.js 中文学习资料和教程导航.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念,它的目标是帮助程 ...

  6. Node.js知识点学习

    Node.js知识点学习 一.基本概念 Node.js,或者 Node,是一个可以让 JavaScript 运行在服务器端的平台.可以说,Node.js开创了javascript模块化开发的先河,早期 ...

  7. node的重点学习笔记(1)————node

    node的重点学习笔记(1)----node 提到node就必须提一下他的npm了,npm是世界上最大的开放源代码的生态系统.通俗来说这就如同亚马逊丛林,要啥物种有啥物种,一个巨大的生态圈,里面有一堆 ...

  8. ELK学习实验014:Nginx日志JSON格式收集

    1 Kibana的显示配置 https://demo.elastic.co/app/kibana#/dashboard/welcome_dashboard 环境先处理干净 安装nginx和httpd- ...

  9. Node.js的学习--使用cheerio抓取网页数据

    打算要写一个公开课网站,缺少数据,就决定去网易公开课去抓取一些数据. 前一阵子看过一段时间的Node.js,而且Node.js也比较适合做这个事情,就打算用Node.js去抓取数据. 关键是抓取到网页 ...

随机推荐

  1. python_day2学习笔记

    基本数据类型 1.数字 int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位, ...

  2. www.verycd.com

    #encoding=utf-8 import urllib import urllib2 postdate = urllib.urlencode({'continueURL':'http://www. ...

  3. QT中循环显示图片和简单的显示图片

    请关注我的github https://github.com/linqiaozhou 以下实例代码不久后将会上传到我的github 这是我最近一个项目中的部分代码 //以下是简单的在QT中显示图片的代 ...

  4. [前端随笔][JavaScript][自制数据可视化] “中国地图”

    说在前面 想自己实现一个可视化的中国地图(可以实现如用户来源省份数据统计功能),网上搜了一下,翻了几页几乎都是第三方库(如echarts.js)实现的,简直不能忍. 不是第三方库不好,只是要花时间去适 ...

  5. SQL Error: 1064, SQLState: 42000

    这个错误是因为mysql有些关键字被我们用了,需要更改关键字成其他名字 ADD ALL ALTER ANALYZE AND AS ASC ASENSITIVE BEFORE BETWEEN BIGIN ...

  6. MySQL常用的数学函数

    在使用mysql自带的函数要慎重,说是会影响数据执行效率,代价太大.这个也要区分开,区分快软件的引用范畴,比如说内部系统业务逻辑比较复杂,功能点很细,但是并发量不是很大,这个时候用MySQL自带的函数 ...

  7. Nodejs Bot学习

    关于示例部分可以参考<BotFramework Nodejs示例><BotBuilder Nodejs示例查看> Bot Framework Nodejs SDK包括几种与用户 ...

  8. web资料收集

    Web安全资料:https://github.com/CHYbeta/Web-Security-Learning http://blog.pentestbegins.com/2017/07/21/ha ...

  9. CodeForces 779A Pupils Redistribution

    简单题. 因为需要连边的人的个数一样,又要保证和一样,所以必须每个数字的个数都是一样的. #include<map> #include<set> #include<cti ...

  10. 用jquery实现文章自动生成二级目录

    前段时间有个同学问有没有办法在博客园上发一篇文章然后自动生成文章的目录.之前不知道该怎么做这几天看了些jquery之后觉得还是容易的. 一级目录 一级目录的思路很简单,找出作为一级标题的元素,在某个地 ...