今天的主題是作一個簡單的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列表等等,很是方便。工具