GitHub倉庫統計工具

今天的主題是做一個簡單的GitHub的倉庫統計工具,目標是輸入GitHub用戶名獲取其所有倉庫的star以及fork數目,可以看作是一個簡單的爬蟲實戰。

我們利用requests爬取GitHub所提供的倉庫數據api,該api的格式如下,

https://api.github.com/users/<GitHub user name>/repos

file

這些json格式的數據是很方便解析的,我們只需要獲取倉庫名,倉庫語言,標星數目以及fork數目這些Key對應的值即可。需要注意的是,fork而來的倉庫不計算在內,因而我們需要對該布爾值進行判斷,篩選出所有自建的倉庫。

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列表從高到低排列,接着對該用戶的所有倉庫進行加和統計。

接着就是數據的打印了,傳統的打印輸出不夠美觀,於是我用了prettytable,以表格的形式將倉庫的數據整齊美觀的打印出來。

def pretty_print(repo):

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

file

GitHub還提供了許多api,可以用於查詢項目最新的提交信息,用戶的基本信息,用戶的follows列表等等,非常方便。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章