基于nodejs的爬虫实现
技术点
- nodejs
- cheerio(解析网页dom节点)
以爬取知乎日报http://daily.zhihu.com/网站为例,实现了一个爬虫小程序。爬虫思路如下:
- 以请求http://daily.zhihu.com/网站首页为入口
- 解析列表页数据,获取每篇文章的标题title、详情页url、图片img
- 根据2中详情页url请求详情页,解析得到详情页文章内容数据
- 保存数据到数据库中
下面是代码实现:
第一步 爬虫入口
const crawler = function(callback) {
var url = 'http://daily.zhihu.com/';
parserMain(url, function(err, list) {
for (let item of list) {
parserContent(item.url, function(err, result) {
item.info = result;
saveData(item);
});
}
});
}
第二步 解析列表页和详情页
- 解析列表页
const parserMain = function(url, callback) {
request(url, function(err, res) {
if (err) {
callback(err);
}
var $ = cheerio.load(res.body.toString());
var articleList = [];
$('.box a').each(function() {
var title = $(this).children().last().text().trim();
var url = 'http://daily.zhihu.com' + $(this).attr('href');
var img = $(this).children().first().attr('src');
var item = {
title: title,
url: url,
img: img,
//info: info,
};
articleList.push(item);
});
callback(null, articleList);
});
}
- 解析详情页
const parserContent = function(url, callback) {
request(url, function(err, res) {
if (err) {
callback(err);
}
var $ = cheerio.load(res.body.toString());
var content = $('.content p').text();
callback(null, content);
});
}
ps:第二步中的列表页cheerio定位可参考下面网站实际dom节点(cheerio相关文档可在官网查看):