Node & Cheerio & WebStorm 學習實驗

準備用cheerio去抓一些網頁看看。html

能夠參考的材料有:node

http://www.cnblogs.com/CraryPrimitiveMan/p/3674421.htmlgit

http://cnodejs.org/topic/5203a71844e76d216a727d2egithub

 

首先打開WebStorm,新建一個空項目,名爲HelloWorld,而後在主目錄新建一個HelloWorld.js,內容npm

console.log("Hello World");數組

而後直接Run,命令行會自動調用node命令來運行:curl

/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.htmlui

先安裝一下cheeriourl

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
相關文章
相關標籤/搜索