从网页抓取数据(使用Web应用编程接口(API)自动请求网站的特定信息 )
优采云 发布时间: 2021-12-21 21:14从网页抓取数据(使用Web应用编程接口(API)自动请求网站的特定信息
)
介绍 - - - -
使用Web应用程序接口(API)自动请求网站的特定信息而不是整个网页,然后将信息可视化。
Web API 是 网站 的一部分,用于与使用非常特定的 URL 请求特定信息的程序进行交互。这种请求称为 API 调用。请求的数据将以易于处理的格式(例如 JSON 或 CSV)返回。
(1) 使用 API 调用请求数据:
https://api.github.com/search/repositories?q=language:python&sort=stars
这个调用返回GitHub当前托管了多少个Python项目,还有有关最受欢迎的Python仓库的信息。
第一部分:https://api.github.com/将请求发送到GitHub网站中响应API调用的部分;
接下来的一部分:search/repositories让API搜索GitHub上的所有仓库。
repositiories后面的问句指出我们要传递一个实参。q表示查询,而等号让我们能够开始指定查询(q=)。
通过使用language:python,我们指出只想获取主要语言为python的仓库的信息。
最后一部分:&sort=stars指定将项目按其获得的星级进行排序。
不完整结果的值为false,所以我们知道请求成功了。如果 GitHub 不能完全处理 API,它返回的值将为 true。
(2) 处理 API 响应和响应字典:
import requests
#执行API调用并存储响应
url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'
r = requests.get(url)
print("Status code:",r.status_code)
#将API响应存储在一个变量中
response_dict = r.json() # 此API返回JSON格式的信息,因此我们使用方法json()转换为python字典!
# 处理结果
print(response_dict.keys())
# total_count表示GitHub总共有多少个Python项目
print("Total repositories:",response_dict['total_count'])
# 探索有关仓库的信息
# 与items相关联的值是一个列表,其中包含很多字典,而每个字典都包含有关一个Python仓库的信息。
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)
(3)监控API速率限制:
大多数API都有速率限制,即在一定时间内可以执行的请求数是有限制的。
'''大部分API都存在速率限制,即你在特定时间内可执行的请求数存在限制。
此处是获悉是搜索API的速率限制:
1.每分钟最多可以有多少次请求;
2.在当前这一分钟,我们还可以执行几次请求;
3.配额将重置的时间。
'''
# 监视python_repos.py文件里的url
import requests
import datetime
url = 'https://api.github.com/rate_limit'
var = requests.get(url)
#响应对象中的status_code属性让我们知道请求是否成功!! 状态码200表示请求成功!
print("Status code:",var.status_code)
#将API相应存储在一个变量中
response_dict = var.json()
# 获取配额将重置的Unix时间
Unix_time = response_dict['resources']['search']['reset']
#转换为咱看的明白的时间
China_time = datetime.datetime.fromtimestamp(Unix_time)
print("每分钟最多可以执行的请求数量:",response_dict['resources']['search']['limit'])
print("当前这一分钟内还可以执行的请求数量:",response_dict['resources']['search']['remaining'])
print("配额将重置的时间:",China_time)
(4)使用Pygal可视化仓库:
创建交互式条形图:条形的高度表示该项目获得了多少颗星。单击该栏将带您到 GitHub 上的项目主页!
import requests
import pygal
# 引入要应用于图表的Pygal样式
from pygal.style import LightColorizedStyle as LCS,LightenStyle as LS
#执行API调用并存储相应
url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'
r = requests.get(url)
print("Status code:",r.status_code)
#将API响应存储在一个变量中
response_dict = r.json()
# total_count表示GitHub总共有多少个Python项目
print("Total repositories:",response_dict['total_count'])
#探索有关仓库的信息
# 与items相关联的值是一个列表,其中包含很多字典,而每个字典都包含有关一个Python仓库的信息。
repo_dicts = response_dict['items']
#研究第一个仓库
repo_dict = repo_dicts[0]
# 存储项目名以及相应项目获得的星数
names,stars = [],[]
for repo_dict in repo_dicts:
names.append(repo_dict['name'])
stars.append(repo_dict['stargazers_count'])
#可视化
#定义一个样式:基色设置为深蓝色;传递实参base_style,以使用LightColorizedStyle类
my_style = LS('#333366',base_style=LCS)
################################################简单实现可视化############################################
# 使用Bar()创建一个简单的条形图, 传入my_style,应用这个样式
#样式实参x_label_rotation=45让标签绕x轴旋转45度;样式实参show_legend=False隐藏图例
chart = pygal.Bar(style=my_style,x_label_rotation=45,show_legend=False)
#设置图表标题
chart.title = "Most-Starred Python Projects on GitHub"
#将属性x_labels设置为列表names
chart.x_labels = names
#将这个数据系列标签设置为空字符串 第二个参数表示工具提示的内容,可变为别的。
chart.add('',stars) #将鼠标指向条形将显示他表示的信息,这通常称为工具提示。
# 生成.svg文件
chart.render_to_file('python_repos.svg')
##########################################################################################################
(5)改进 Pygal 图:
import requests
import pygal
# 引入要应用于图表的Pygal样式
from pygal.style import LightColorizedStyle as LCS,LightenStyle as LS
#执行API调用并存储相应
url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'
r = requests.get(url)
print("Status code:",r.status_code)
#将API响应存储在一个变量中
response_dict = r.json()
# total_count表示GitHub总共有多少个Python项目
print("Total repositories:",response_dict['total_count'])
#探索有关仓库的信息
# 与items相关联的值是一个列表,其中包含很多字典,而每个字典都包含有关一个Python仓库的信息。
repo_dicts = response_dict['items']
#研究第一个仓库
repo_dict = repo_dicts[0]
# 存储项目名以及相应项目获得的星数
names,stars = [],[]
for repo_dict in repo_dicts:
names.append(repo_dict['name'])
stars.append(repo_dict['stargazers_count'])
#可视化
#定义一个样式:基色设置为深蓝色;传递实参base_style,以使用LightColorizedStyle类
my_style = LS('#333366',base_style=LCS)
#################################################增强版实现可视化###########################################
# 创建一个Pygal类Config的实例,通过修改这个实例的属性,可定制图表的外观
my_config = pygal.Config()
# x轴标签绕x轴旋转45度,隐藏图例
my_config.x_label_rotation = 45
my_config.show_legend = False
# 设置图表标题字体大小
my_config.title_font_size = 24
# 设置副标签的字体大小 此图表中,副标签是x轴上的项目名以及y轴上的大部分数字
my_config.label_font_size = 14
# 设置主标签的字体大小 此图表中,主标签是y轴上为5000整数倍的刻度
my_config.major_label_font_size = 18
# 使用truncate_label将较长的项目名缩短为15个字符(如果将鼠标指向屏幕上被截短的项目名,将显示完整的项目名)
my_config.truncate_label = 15
# 隐藏图表中的水平线
my_config.show_y_guides = False
my_config.width = 1000
# 创建Bar实例时,将my_config作为第一个实参,从而通过一个实参传递了所有的配置设置
chart = pygal.Bar(my_config,style=my_style)
chart.title = "Most-Starred Python Projects on GitHub"
chart.x_labels = names
chart.add('',stars) # 工具提示信息,当鼠标指向条形将显示其星星的颗数。
chart.render_to_file('python_repos_cooler.svg')
(6)添加自定义工具提示:第1部分:添加自定义工具提示学习!
python3.6 pygal模块不交互,图片无法显示数据。猜测原因:可能是pip安装的版本与python3版本不兼容。所以去官网下载Pygal就可以正常使用了!
创建自定义工具提示:显示该项目获得了多少颗星并显示该项目的描述。
import requests
import pygal
# 引入要应用于图表的Pygal样式
from pygal.style import LightColorizedStyle as LCS,LightenStyle as LS
#定义一个样式:基色设置为深蓝色;传递实参base_style,以使用LightColorizedStyle类
my_style = LS('#333366',base_style=LCS)
chart = pygal.Bar(style=my_style,x_label_rotation=45,show_legend=False)
chart.title = 'Python Projects'
# 可视化三个项目
chart.x_labels = ['httpie', 'django', 'flask']
# 并给每个项目对应的条形都指定自定义标签。所以,向add()传递一个字典列表,而不是值列表!
plot_dicts = [
{'value':16101, 'label': 'Description of httpie.'},
{'value':15028, 'label': 'Description of django.'},
{'value':14798, 'label': 'Description of flask.'},
]
chart.add('', plot_dicts)
chart.render_to_file('bar_descriptions.svg')
Pygal 根据与键“值”关联的数字确定条的高度,并使用与“标签”相关的字符串为条创建工具提示。
这样,显示的工具提示:除了默认的工具提示(获得的星数)外,还会显示我们传入的自定义提示。
第 2 部分:向该项目添加自定义工具提示!
修改以下部分:
(7)在图表中添加一个可点击的链接:
Pygal 根据与键“xlink”关联的 URL 将每个条形转换为活动链接。当你点击图表中的任意一个条时,浏览器会打开一个新标签页,里面会显示对应项目的GitHub页面!