今天撸了个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地址