node爬虫入门

911 阅读1分钟

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

npm包准备

需要下载好四个依赖包

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

思路

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

代码

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地址

不同网址需不同对待