nodejs真是太酷了!
使用 http.get() 抓取页面,然后使用 jsdom 来解析页面(简单配置+jquery语法),简单代码如下:
var http = require('http');
// 使用 jsdom 来解析html https://www.npmjs.org/package/jsdom
var jsdom = require('jsdom');
// 抓取 V2EX 最新话题
var url = 'http://www.v2ex.com';
// 获取一个页面
http.get(url, function(res) {
var body = '';
console.log('状态码:', res.statusCode);
res.on('data', function(chunk) {
console.log('数据传输中...');
body += chunk;
});
res.on('end', function() {
console.log('数据传输完成:');
// 使用 jsdom 解析抓取到的html
jsdom.env(
body,
'http://code.jquery.com/jquery.js',
function(errors, window) {
var $ = window.$;
console.log('数据传输完成');
var len = $('.cell.item').length;
console.log('找到最新主题', len);
for (var i = 0; i & lt; len; i++) {
var title = $('.cell.item').eq(i).find('.item_title a').html();
var link = url + $('.cell.item').eq(i).find('.item_title a').attr('href');
console.log(title + '(' + link + ')');
}
}
);
});
}).on('error', function(e) {
console.log( & quot; 发生错误: & quot; + e.message);
});
另一个例子,抓取知乎的一个问答:
var http = require('http');
// 使用 jsdom 来解析html https://www.npmjs.org/package/jsdom
var jsdom = require('jsdom');
// 抓取 知乎话题『你认为自己最好的照片是哪张?』里的图片
var url = 'http://www.zhihu.com/question/20937691';
// 获取一个页面
http.get(url, function(res) {
var body = '';
console.log('状态码:', res.statusCode);
console.log('数据传输中...');
res.on('data', function(chunk) {
body += chunk;
});
res.on('end', function() {
console.log('数据传输完成:');
// 使用 jsdom 解析抓取到的html
jsdom.env(
body, [ & quot;http: //code.jquery.com/jquery.js"],
function(errors, window) {
var $ = window.$;
console.log('数据传输完成');
// 知乎问题
var question = $('title').text();
console.log(question);
// 知乎回答
var len = $('#zh-question-answer-wrap').find('.zm-item-answer ').length;
console.log('共有', len, '个回答');
for (var i = 0; i & lt; len; i++) {
var author = $('.zm-item-answer').eq(i).find('.zm-item-answer-author-wrap a:nth-child(2)').text();
var author_link = 'http://www.zhihu.com' + $('.zm-item-answer').eq(i).find('.zm-item-answer-author-wrap a:nth-child(2)').attr('href');
var avatar = $('.zm-item-answer').eq(i).find('.zm-list-avatar').attr('src');
var vote_count = $('.zm-item-answer').eq(i).find('.zm-item-vote-count').text();
author = author ? author : '匿名用户';
// 输出每个答案下的 作者 票数等信息
console.log('第' + i + '位', vote_count + '票', '作者:' + author);
console.log('(主页:' + author_link + '头像:' + avatar + ')')
var imgs = $('.zm-item-answer').eq(i).find('.zm-item-rich-text img');
var imgLen = imgs.length;
for (var j = 0; j & lt; imgLen; j++) {
var imgSrc = imgs.eq(j).attr('src');
if (imgSrc) {
console.log('图片' + j + ': ' + imgSrc);
}
}
console.log('\n')
}
}
);
});
}).on('error', function(e) {
console.log( & quot; 发生错误: & quot; + e.message);
});
此外,可以试试用简化的 request 模块代替 http.get():
// $ npm install request (https://www.npmjs.org/package/request)
var request = require('request');
request('http://laispace.github.io', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body)
}
});
接下来就只要把解析出的数据存入自己的数据库,就可以拿来用了。