今天撸了个node爬虫的demo,win10系统,已经搭好node环境,此篇作为记录。

npm包准备

需要下载好四个依赖包

  • superagent:轻量ajaxAPI,用于页面数据下载
  • cheerio: 服务端进行dom操作,语法类似jquery,用于get我们需要的数据
  • superagent-charset:为superagent添加charset支持
  • express

思路

  • npm准备
  • 定义一个想要爬取的地址
  • superagent进行请求
  • superagent-charset进行编码设置,避免乱码
  • cheerio分析页面数据
  • express起服务显示在页面上

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
let superagent = require('superagent');
//superagent-charset用于指定网页编码,因为我爬取的地址编码是gb2312,Node.js 抓取非 utf-8 的中文网页时会出现乱码问题,所以此处对superagent进行扩展
require("superagent-charset")(superagent);
let cheerio = require('cheerio');
let express = require('express');
let app = express();
let news = [];

superagent
.get('http://top.baidu.com/buzz?b=1') //get请求地址
.charset('gb2312') //设置与地址共同的meta编码
.end((err, res) => {
if (err) {
console.log('该网址抓取失败', err)
} else {
getText(res.text); //res.text 包含未解析前的响应内容
}
});

function getText(val) {
let $ = cheerio.load(val); //解析文档
$('a.list-title').each((idx, ele) => { //定位dom节点,获取数据
news.push(
{
title: $(ele).text(),
href: $(ele).attr('href')
}
)
})
}

let serve = app.listen(3001, function() { //监听端口3001
let host = serve.address().address;
let port = serve.address().port;

app.get('/', async (req, res, next) => {
res.send(news);
});

console.log('runing at', port);
})

git地址