Node & Cheerio & WebStorm 学习实验

本文介绍如何利用Node.js中的Cheerio库抓取指定网页内容并解析数据。通过解决字符编码问题,成功获取了网易公开课的课程名称。

准备用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

 

标题基于Python的自主学习系统后端设计与实现AI更换标题第1章引言介绍自主学习系统的研究背景、意义、现状以及本文的研究方法和创新点。1.1研究背景与意义阐述自主学习系统在教育技术领域的重要性和应用价值。1.2国内外研究现状分析国内外在自主学习系统后端技术方面的研究进展。1.3研究方法与创新点概述本文采用Python技术栈的设计方法和系统创新点。第2章相关理论与技术总结自主学习系统后端开发的相关理论和技术基础。2.1自主学习系统理论阐述自主学习系统的定义、特征和理论基础。2.2Python后端技术栈介绍DjangoFlask等Python后端框架及其适用场景。2.3数据库技术讨论关系型和非关系型数据库在系统中的应用方案。第3章系统设计与实现详细介绍自主学习系统后端的设计方案和实现过程。3.1系统架构设计提出基于微服务的系统架构设计方案。3.2核心模块设计详细说明用户管理、学习资源管理、进度跟踪等核心模块设计。3.3关键技术实现阐述个性化推荐算法、学习行为分析等关键技术的实现。第4章系统测试与评估对系统进行功能测试和性能评估。4.1测试环境与方法介绍测试环境配置和采用的测试方法。4.2功能测试结果展示各功能模块的测试结果和问题修复情况。4.3性能评估分析分析系统在高并发等场景下的性能表现。第5章结论与展望总结研究成果并提出未来改进方向。5.1研究结论概括系统设计的主要成果和技术创新。5.2未来展望指出系统局限性并提出后续优化方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值