前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >做一个GitHub仓库统计工具

做一个GitHub仓库统计工具

作者头像
老肥码码码
发布2020-03-12 18:36:36
6170
发布2020-03-12 18:36:36
举报
文章被收录于专栏:算法与数据之美

今天的主题是做一个简单的GitHub的仓库统计工具,目标是输入GitHub用户名获取其所有仓库的star以及fork数目,可以看作是一个简单的爬虫实战。

我们利用requests爬取GitHub所提供的仓库数据api,该api的格式如下,

代码语言:javascript
复制
https://api.github.com/users/<GitHub user name>/repos

这些json格式的数据是很方便解析的,我们只需要获取仓库名,仓库语言,标星数目以及fork数目这些Key对应的值即可。需要注意的是,fork而来的仓库不计算在内,因而我们需要对该布尔值进行判断,筛选出所有自建的仓库。

代码语言:javascript
复制
defcrawl(name):

    headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'}
    flag=True
    repo=[]
    page=1
    while flag:
        url='https://api.github.com/users/{}/repos?page={}'.format(name,page)
        try:
            r=requests.get(url,headers=headers)
            data=r.json()
            if len(data) == 0:
                flag=False
            for i in data:
                if not i['fork']:
                    repo.append([i['name'],i['language'],i['stargazers_count'],i['forks_count']])
            page+=1
        except Exception as e:
            print(e)
            break
    repo=sorted(repo, key=lambda x: x[2], reverse=True)
    repo.append(['Total','/',sum([i[2] for i in repo]), sum([i[3] for i in repo])])
    return repo

获取数据之后做一些简单的处理,按照star数目将repo列表从高到低排列,接着对该用户的所有仓库进行加和统计。

接着就是数据的打印了,传统的打印输出不够美观,于是我用了prettytable,以表格的形式将仓库的数据整齐美观的打印出来。

代码语言:javascript
复制
defpretty_print(repo):

    x=PrettyTable()
    x.field_names=["Repository","language","Star","Fork"]
    for i in repo:
        x.add_row(i)
    print(x)

下面以我的账号为例,展示一下效果

除了仓库的api外,GitHub还提供了许多其它类型的api,可以用于查询项目最新的提交信息,用户的基本信息,用户的follows列表等等,非常方便。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与数据之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档