Nodejs第三课

使用superagent和cheerio完成简单爬虫

  • 使用superagent抓取网页
  • 使用cheerio分析网页

课程内容

Node.js 异步特性特别厉害,想要学习,利用爬虫的场景比较适合.

原文中介绍了爬github有rate limit限制,作者是菜鸟,不懂,所以也爬了Node.js开源社区CNode社区

使用了三个依赖,分别是express、superagent和cheerio

superagent是一个http方面的库,可以发起get或post请求
cheerio大家可以理解为Node.js版的jQuery,使用方式和jQuery一样
两者均为链式操作,用起来特别爽

走你:

1
2
3
4
$ npm init  // 初始化
$ npm install <packeagename> --save
$ touch app.js
$ vi app.js

第一步我们尝试打印出superagent发出的get请求的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var superagent = require('superagent');
var cheerio = require('cheerio');
var express = require('express');
var app = express();
app.get('/', function(req, res, next){
superagent.get('https://cnodejs.org')
.end(function(err, sres){
if (err) {
return next(err);
}
res.send(sres);
})
});
app.listen(3000, function(req, res){
console.log('app is running at port 3000');
});

我们分析网页内容,修改代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
app.get('/', function(req, res, next){
superagent.get('https://cnodejs.org')
.end(function(err, sres){
if (err) {
return next(err);
}
var $ = cheerio.load(sres.text);
var items = [];
// 根据网页内容分析
$('#topic_list .topic_title').each(function(idx, element){
var $element = $(element);
items.push({
title: $element.attr('title'),
href: $element.attr('href')
});
});
res.send(items);
})
});

试一试,是不是完成了一个小小的爬虫程序?

下一步我们继续挑战,修改代码,把作者也分析出来,试试吧,下面附上代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    app.get('/', function(req, res, next){
superagent.get('https://cnodejs.org')
.end(function(err, sres){
if (err) {
return next(err);
}
var $ = cheerio.load(sres.text);
var items = [];
$('#topic_list .cell').each(function(idx, element){
var $element = $(element);
var $top_title = $element.find('.topic_title');
var $author = $element.find('.user_avatar img');
items.push({
title: $top_title.attr('title'),
href: $top_title.attr('href'),
author: $author.attr('title')
});
});
res.send(items);
})
});
# lesson
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×