使用node.js来实现简单爬虫
kvkens opened this issue · 0 comments
kvkens commented
最近因为工作中使用node.js来开发工具,所以想到了分享下之前写的简单爬虫!
目的
- superagent 抓取网页
- cheerio 分析网页
准备
- Node.js
- Express
- Superagent
- Cheerio
文档参考
- superagent(http://visionmedia.github.io/superagent/ ) 是个 http 方面的库,可以发起 get 或 post 请求。
- cheerio(https://github.com/cheeriojs/cheerio )为服务器特别定制的,快速、灵活、实施的jQuery. 用来从网页中以 css selector 取数据,使用方式跟 jquery 一样。
具体编码
这里我就拿正妹的博客做演示了……
var express = require('express');
var superagent = require('superagent');
var cheerio = require('cheerio');
var app = express();
app.get('/', function (req, res, next) {
superagent.get('http://www.cnblogs.com/rubylouvre/')
.end(function (err, sres) {
if (err) {
return next(err);
}
// sres.text 里面存储着网页的 html 内容,将它传给 cheerio.load 之后
// 就可以得到一个实现了 jquery 接口的变量,我们习惯性地将它命名为 `$`
// 剩下就都是 jquery 的内容了
var $ = cheerio.load(sres.text);
var items = [];
$("#main > .post h2 > a").each(function (index, element) {
var $element = $(element);
items.push({
"title": $(this).text(),
"url": $(this).attr("href")
});
});
res.send(items);
});
});
app.listen(4000, function () {
console.log('app is listenling at port 4000');
});
是不是非常简单,这个只是最初级的爬虫,一般复杂的需要匹配正则筛选主要的数据进行入库如MongoDB等,不同层级、翻页爬数据这才是一个合格的爬虫。