唯品秀前端开发技术博客
首页 > 前端开发 > Node.js基础 > 5分钟教你使用Node+Express爬取他人网站数据

5分钟教你使用Node+Express爬取他人网站数据

2018-12-27 分类:Node.js基础 作者:管理员 阅读(1420)

经常听闻别人说爬数据,是不是觉得很牛逼的样子,其实前端通过node.js爬取数据也很简单,在此牺牲一下 CNode 社区(国内最专业的 Node.js 开源技术社区),教大家怎么去爬它了。

目标

当在浏览器中访问 http://localhost:3000/ 时,输出 CNode(https://cnodejs.org/ ) 社区首页的所有帖子标题和链接,以 json 的形式。

输出示例
1
2
3
4
5
6
7
8
9
10
[
  {
    "title": "【公告】发招聘帖的同学留意一下这里",
    "href": "http://cnodejs.org/topic/541ed2d05e28155f24676a12"
  },
  {
    "title": "发布一款 Sublime Text 下的 JavaScript 语法高亮插件",
    "href": "http://cnodejs.org/topic/54207e2efffeb6de3d61f68f"
  }
]

知识点

  • 1、学习使用 superagent 抓取网页
  • 2、学习使用 cheerio 分析网页
  • 实现代码

    安装 expresssuperagent 和 cheerio。

    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
    var express = require('express');
    var cheerio = require('cheerio');
    var superagent = require('superagent');

    var app = express();

    app.get('/', function (req, res, next) {
      // 用 superagent 去抓取 https://cnodejs.org/ 的内容
      superagent.get('https://cnodejs.org/')
        .end(function (err, sres) {
          // 常规的错误处理
          if (err) {
            return next(err);
          }
          // sres.text 里面存储着网页的 html 内容,将它传给 cheerio.load 之后
          // 就可以得到一个实现了 jquery 接口的变量,我们习惯性地将它命名为 `$`
          // 剩下就都是 jquery 的内容了
          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);
        });
    });


    app.listen(3000, function () {
      console.log('app is listening at port 3000');
    });
    1
    运行方式 node app.js + 回车
    结果

    「两年博客,如果觉得我的文章对您有用,请帮助本站成长」

    赞( 5) 打赏

    谢谢你请我吃鸡腿*^_^*

    支付宝
    微信
    5

    谢谢你请我吃鸡腿*^_^*

    支付宝
    微信
    标签:

    上一篇:

    下一篇:

    共有 2 条评论 - 5分钟教你使用Node+Express爬取他人网站数据

    1. 不吃鱼的猫 Windows NT Chrome 57.0.2987.98

      大佬在学后端了么?

      1. 唯品秀前端技术博客 Windows NT Chrome 57.0.2987.98

        @不吃鱼的猫前端还是要懂点后端的

    博客简介

    唯品秀博客: weipxiu.com,一个关注Web前端开发技术、关注用户体验、坚持更多原创实战教程的个人网站,愿景:成为宇宙中最具有代表性的前端博客,期待您的参与 

    精彩评论

    友情链接

    他们同样是一群网虫,却不是每天泡在网上游走在淘宝和网游之间、刷着本来就快要透支的信用卡。他们或许没有踏出国门一步,但同学却不局限在一国一校,而是遍及全球!

    站点统计

    • 文章总数: 200 篇
    • 草稿数目: 3 篇
    • 分类数目: 12 个
    • 页面总数: 21 个
    • 评论总数: 819 条
    • 链接总数: 13 个
    • 标签总数: 394 个
    • 建站时间: 915 天
    • 注册用户: 997 人
    • 访问总量: 8689361 次
    • 最近更新: 2019年6月18日
    服务热线:
     173xxxx7240

     QQ在线交流

     旺旺在线