用Nodejs Cheerio爬取NPM包详细信息

前言

NodeJs是前端开发工程师最熟悉不过的了,下面我就介绍一下如何爬取npm官网的包数据。

爬取数据

  1. init 一个package.json
   npm init -y
复制代码
  1. 下载 cheeriorequestrequest-promise
   npm install cheerio && npm install request && npm insatll request-promise
复制代码
  1. 新建一个 index.js文件,代码如下
    const rp = require('request-promise');
    const cheerio = require('cheerio');
    
    const getNpmInfo = async ( packageName ) => {
    
      const options = {
        uri: 'https://www.npmjs.com/package/' + packageName,
        transform: body => cheerio.load(body)
      };
    
      const $ = await rp(options);
    
      let infoArray = [];
    
      $('._9dMXo ._2_OuR').each(function() {
        let key, value;
    
        // find 方法获取 key
        key = $(this).find('._1IKXc').text();
    
        // 下面两个 key 里面包含链接要单独处理
        if(key === 'repository' || key === 'homepage') {
          value = $(this).find('.n8Z-E').find('.zE7yA').attr('href');
        } else {
          value = $(this).find('.n8Z-E').text();
        }
    
        infoArray.push({key, value});
    
      })
    
      console.log(infoArray);
      // return infoArray;
    }
    
    getNpmInfo('webpack-dev-server');
    
    // module.exports = getNpmInfo;
复制代码
  1. 终端执行
    node index.js
复制代码

会看到控制台如下图所示的内容

这样你就获取到了想要的信息了。

那么问题来了...

Node环境获取的数据如何展示在浏览器环境里?

我能想到的办法就是启一个服务去接收这个方法,然后返回查询到的值。

启动服务

  1. 安装express
    npm install express --save
复制代码
  1. index.js修改为如下,就是把这个方法暴露出去
    const rp = require('request-promise');
    const cheerio = require('cheerio');
    
    const getNpmInfo = async ( packageName ) => {
      // ...
      // console.log(infoArray);
      return infoArray;
    }
    
    // getNpmInfo('webpack-dev-server');
    
    module.exports = getNpmInfo;
复制代码
  1. 新建 api.js,内容如下
    const express = require('express');
    const getNpmInfo = require('./index');
    const PORT = 8803;
    const app = new express();
    
    app.use('/',  async function(req, res) {
      res.send (await getNpmInfo(req.query.name))
    })
    
    console.log('Serve is run at ' + PORT + ' !')
    
    app.listen(PORT);
复制代码
  1. 启动api.js
    node api.js
复制代码
  1. 访问 localhost:8803/?name=webpack-dev-server 就能看到数据啦!

备注:当然如果想正式使用这个接口,那就要放在服务器上面。

如果有什么好的方法可以解决数据能够在浏览器展示的问题,欢迎留言讨论。

敬上 git 地址: get-npm-package-info 求个?,谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值