从网页抓取数据(使用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页面!

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线