今天的主题是作一个简单的GitHub的仓库统计工具,目标是输入GitHub用户名获取其全部仓库的star以及fork数目,能够看做是一个简单的爬虫实战。git
咱们利用requests爬取GitHub所提供的仓库数据api,该api的格式以下,github
https://api.github.com/users/<GitHub user name>/repos
这些json格式的数据是很方便解析的,咱们只须要获取仓库名,仓库语言,标星数目以及fork数目这些Key对应的值便可。须要注意的是,fork而来的仓库不计算在内,于是咱们须要对该布尔值进行判断,筛选出全部自建的仓库。json
def crawl(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列表从高到低排列,接着对该用户的全部仓库进行加和统计。api
接着就是数据的打印了,传统的打印输出不够美观,因而我用了prettytable,以表格的形式将仓库的数据整齐美观的打印出来。app
def pretty_print(repo): x=PrettyTable() x.field_names=["Repository","language","Star","Fork"] for i in repo: x.add_row(i) print(x)
GitHub还提供了许多api,能够用于查询项目最新的提交信息,用户的基本信息,用户的follows列表等等,很是方便。工具