当前位置: 首页 > 后端技术 > Python

GitHub仓库统计工具

时间:2023-03-26 13:17:17 Python

今天的主题是做一个简单的GitHub仓库统计工具。目标是输入GitHub用户名获取所有仓库的star数和fork数。可以看作是一个简单的爬虫战斗。我们使用requests来爬取GitHub提供的仓库数据api。api的格式如下,https://api.github.com/users//repos这些json格式的数据非常容易解析。我们只需要获取仓库名称、仓库语言、星数、分叉数这些key对应的值即可。需要注意的是,fork出来的仓库不算在内,所以需要判断布尔值,过滤掉所有自建仓库。defcrawl(name):headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/79.0.3945.130Safari/537.36'}flag=Truerepo=[]page=1whileflag:url='https://api.github.com/users/{}/repos?page={}'.format(name,page)try:r=requests.get(url,headers=headers)data=r.json()iflen(data)==0:flag=Falseforiindata:ifnoti['fork']:repo.append([i['name'],i['language'],i['stargazers_count'],i['forks_count']])page+=1除了Exceptionase:print(e)breakrepo=sorted(repo,key=lambdax:x[2],reverse=True)repo.append(['Total','/',sum([i[2]foriinrepo]),sum([i[3]foriinrepo])])returnrepo获取到数据后,做一些简单的处理,将repo列表按照star数从高到低排列,然后对用户所有的repository进行相加统计。下一步是打印数据。传统的打印输出不够美观,所以我使用prettytable将仓库数据以表格的形式整齐漂亮的打印出来。defpretty_print(repo):x=PrettyTable()x.field_names=["Repository","language","Star","Fork"]foriinrepo:x.add_row(i)print(x)GitHub也提供可以通过很多API查询项目的最新提交信息、用户的基本信息、用户的关注者列表等,非常方便。