2015-01-10
node版本是v0.10.28
。使用了3个第三方库,分别是request、iconv-lite、cheerio。
使用request获取网络内容
# !/usr/bin/env node
var request = require('request');
var options = {
url: 'http://www.qq.com',
headers: {
'User-Agent': 'request'
}
};
request(options,function(error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
}
});
能够抓取网页内容,可惜内容乱码(http://www.qq.com
编码为gb2312,上述代码所在文件为utf-8编码,而且Node当前貌似也不支持gb2312等编码。)。这里用iconv-lite对其进行转换。
使用iconv-lite对获取的网页进行编码转换
# !/usr/bin/env node
var iconv = require('iconv-lite');
var request = require('request');
iconv.extendNodeEncodings();
var options = {
url: 'http://www.qq.com',
encoding: 'gb2312',
headers: {
'User-Agent': 'request'
}
};
request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
}
}
);
现在,抓取的网页内容就正常了。然后使用cheerio提取链接。
使用cheerio提取链接
# !/usr/bin/env node
var iconv = require('iconv-lite');
var request = require('request');
var cheerio = require('cheerio');
iconv.extendNodeEncodings();
var options = {
url: 'http://www.qq.com',
encoding: 'gb2312',
headers: {
'User-Agent': 'request'
}
};
request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
$ = cheerio.load(body);
console.log($('a').length);
$('a').each(function(i, elem) {
title = $(this).text();
url = $(this).attr('href');
if (typeof(title) != 'undefined' && typeof(url) != 'undefined') {
console.log(title.trim());
console.log(url);
}
});
}
}
);
对链接的处理可以更细致一些。比如有一些url是javascript:void(0)
,甚至有的是空串。