数据分析--使用Web API(应用编程接口)以自动请求GitHub网站的特定信息为例爬取数据,附完整的Python代码详解

一、前提准备:GitHub简介

       GitHub(https://github.com/)是一个面向开源及私有软件项目的托管平台。GitHub上的项目都存储在仓库中,包含与项目相关联的一切:代码,项目参与者的信息,问题和bug报告等等。对于喜欢的项目,GitHub用户可以给它加星(star)以表示支持,用户还可以跟踪他可能想使用的项目。

       先看看这个网址https://api.github.com/search/repositories?q=language:python&sort=stars

这个调用返回GitHub当前托管了多少个Python项目,还有最受欢迎的Python仓库信息,下面来仔细研究这个调用。
https://api.github.com/:将请求发送到GitHub网站中响应API调用的部分
search/repositories:让API搜素GitHub是上的所有仓库
repositories后面的?:指出要传递一个实参
q=:指定查询
language:python:获取主要语言为Python的仓库的信息
&sort=stars:指定项目按照其获得的星级进行排序

搜索结果如图
在这里插入图片描述
total_count:总共有多少项目
incomplete_results:不完整的结果=false 表明请求是成功的
items:包含GitHub上最受欢迎的Python项目的信息

       接下来,我们将编写一个程序,它将自动下载GitHub上星级最高的Python项目信息。

二、上代码

2.1处理响应

# coding = utf-8

import requests

# 执行api调用并存储响应
url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'
r = requests.get(url)

# r.status_code属性:状态码为200表示请求成功
print("Status code:", r.status_code)

# 将api响应存储在一个变量中(这个api返回json格式的信息,因此我们使用方法json()将这些信息转换为python字典)
response_dict = r.json()
# 打印与'total_count'相关联的值,指出GitHub总共包含了多少个Python仓库
print("Total repositories:", response_dict['total_count'])

# 探索有关仓库的信息
repo_dicts = response_dict['items']
print("Repositories returned:", len(repo_dicts))

"""研究第一个仓库"""
repo_dict = repo_dicts[0]
# 打印这个字典的键数,看看其中有多少信息
print("\nKeys:", len(repo_dict))
# #打印这个字典的所有键,看看其中有哪些信息
# for key in sorted(repo_dict.keys()):
#     print(key)

# 表示第一个仓库的字典中与很多键相关联的值
print("\nSelected information about first repository:")
# 打印项目的名称
print('Name:', repo_dict['name'])
# 项目所有者是用一个字典来表示的,因此我们使用键owner来访问表示所有者的字典,再使用键key来获取所有者的登录名
print("Owner:", repo_dict['owner']['login'])
# 打印获得了多少个星的评级
print("Stars:", repo_dict['stargazers_count'])
#打印项目再GitHub仓库的URL
print("Reponsitory:",repo_dict['html_url'])
#显示项目的创建时间
print("Created:", repo_dict['created_at'])
#显示项目最后一次更新的时间
print("Updated:", repo_dict['updated_at'])
#打印仓库的描述
print("Description:",repo_dict['description'])


运行结果
在这里插入图片描述

2.2返回每个仓库的特定信息

# coding = utf-8

import requests

# 执行api调用并存储响应
url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'
r = requests.get(url)

# r.status_code属性:状态码为200表示请求成功
print("Status code:", r.status_code)

# 将api响应存储在一个变量中(这个api返回json格式的信息,因此我们使用方法json()将这些信息转换为python字典)
response_dict = r.json()
# 打印与'total_count'相关联的值,指出GitHub总共包含了多少个Python仓库
print("Total repositories:", response_dict['total_count'])

# 探索有关仓库的信息
repo_dicts = response_dict['items']
print("Repositories returned:", len(repo_dicts))

"""研究第一个仓库"""
repo_dict = repo_dicts[0]
# 打印这个字典的键数,看看其中有多少信息
print("\nKeys:", len(repo_dict))
# #打印这个字典的所有键,看看其中有哪些信息
# for key in sorted(repo_dict.keys()):
#     print(key)

# 表示第一个仓库的字典中与很多键相关联的值
print("\nSelected information about first repository:")

for repo_dict in repo_dicts:
    # 打印项目的名称
    print('Name:', repo_dict['name'])
    # 项目所有者是用一个字典来表示的,因此我们使用键owner来访问表示所有者的字典,再使用键key来获取所有者的登录名
    print("Owner:", repo_dict['owner']['login'])
    # 打印获得了多少个星的评级
    print("Stars:", repo_dict['stargazers_count'])
    # 打印项目再GitHub仓库的URL
    print("Reponsitory:", repo_dict['html_url'])
    # 打印仓库的描述
    print("Description:", repo_dict['description'])


运行结果
在这里插入图片描述

2.3监视API的速率限制

大多数API都存在速率限制,要获悉你是否接近了GitHub的限制,在浏览器中输入https://api.github.com/rate_limit,也可以直接点击此处便可以得到速率限制信息

{"resources": {"core": {"limit": 60, "remaining": 60, "reset": 1598258938},
               "graphql": {"limit": 0, "remaining": 0, "reset": 1598258938},
               "integration_manifest": {"limit": 5000, "remaining": 5000, "reset": 1598258938},
               "search": {"limit": 10, "remaining": 10, "reset": 1598255398}},
 "rate": {"limit": 60, "remaining": 60, "reset": 1598258938}}

在这里插入图片描述

如图可知,极限为每分钟处理10个请求,而在这一分钟内,我们还可以执行10个请求,reset值指的是配额将重置的Unix时间或新纪元时间(1970年1月1日午夜后多少秒)。用完配额后,你将收到一条简单的响应,由此知道API已到达极限。到达极限后,你必须等待配额重置

注意:很多API都需要你注册获得API密匙后才能执行API调用。
学《python编程从入门到实战》17章第一节。
以上就是全部内容啦,如果有不懂的小伙伴欢迎提出来傲!咱一起解决

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/hanhanwanghaha/article/details/108198409