博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python学习之路16-使用API
阅读量:6510 次
发布时间:2019-06-24

本文共 3844 字,大约阅读时间需要 12 分钟。

《Python编程:从入门到实践》笔记。
本篇是Python数据处理的第三篇,本篇将使用Web应用程序接口自动请求网站的特定信息并可视化。

1. 前言

本将需要用到requests模块来请求网站数据。主要内容如下:

  • 向GitHub请求项目数据,按星排序;
  • 使用pygal可视化上述数据;
  • 调用Hacker News的API

2. GitHub repositories

获取GitHub中仓库的描述信息,并按星数排序:

# 代码: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()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)    # 结果:Status code: 200Total repositories: 2563652Repositories returned: 30Keys: 72archive_urlarchivedassignees_urlblobs_url-- snip --

有些请求可能并不能成功,可能需要你的个人授权码:

headers = {"Authorization":"your perosonal token"}url = "https://api.github.com/search/repositories?q=language:python&sort=stars"r = requests.get(url, headers=headers)

大多数API都存在速率限制,即特定时间内可执行的请求数。对于GitHub的速率限制可以访问 访问,时间是“每分钟”。

3. 使用Pygal可视化仓库

使用一个参数配置类来定义图表的参数,并自定义图表中每个条形的描述信息,并给这些条形添加网址链接。

import requestsimport pygalfrom pygal.style import LightColorizedStyle as LCS, LightenStyle as LS-- snip --repo_dicts = response_dict["items"]names, plot_dicts = [], []for repo_dict in repo_dicts:    names.append(repo_dict["name"])    plot_dict = {        # 每个数据的值        "value": repo_dict["stargazers_count"],        # 自定义每个数据的描述信息        # 原文中没有将其转换成str,报错;可能现在数据类型更改了?        "label": str(repo_dict["description"]),        # 为每个条添加网址链接        "xlink": repo_dict["html_url"],    }    plot_dicts.append(plot_dict)# 可视化my_style = LS("#333366", base_style=LCS)# 图表配置类my_config = pygal.Config()# x轴标签顺时针旋转45度my_config.x_label_rotation = 45# 不显示图例my_config.show_legend = Falsemy_config.title_font_size = 24my_config.label_font_size = 14# 主标签大小,y轴my_config.major_label_font_size = 18# x轴标签最长15个字符my_config.truncate_label = 15# 隐藏水平线my_config.show_y_guides = Falsemy_config.width = 1000chart = pygal.Bar(my_config, style=my_style)chart.title = "Most-Starred Python Projects on GitHub"chart.x_labels = nameschart.add("", plot_dicts)chart.render_to_file("python_repos.svg")

得到如下表格:

图片描述

现在每一个数据都有自己的描述信息,并且点击它们还能跳到它们的项目网站。注意左侧y轴上的刻度,书中的刻度很密集,但同样的代码在这里不知道为什么很稀疏,所以这里没有体现出第34行代码的效果。

4. Hacker News API

Hacker News的API能让你访问该网站所有文章和评论的信息,且不用注册获取秘钥。下面通过一个API调用获取其上当前热门文章的ID,再查看前30篇文章(有可能访问不了,至于原因以及具体怎么做,你懂的):

import requestsfrom operator import itemgetter# 执行API调用并存储响应url = "https://hacker-news.firebaseio.com/v0/topstories.json"r = requests.get(url)print("Status code:", r.status_code)# 处理有关每篇文章的信息submission_ids = r.json()submission_dicts = []for submission_id in submission_ids[:30]:    # 对于每篇文章,都执行一个API调用    url = ("https://hacker-news.firebaseio.com/v0/item/" + str(submission_id) + ".json")    submission_r = requests.get(url)    print(submission_r.status_code)    response_dict = submission_r.json()    submission_dict = {        "title": response_dict["title"],        "link": "http://news.ycombinator.com/item?id=" + str(submission_id),        "comments": response_dict.get("descendants", 0)    }    submission_dicts.append(submission_dict)submission_dicts = sorted(submission_dicts, key=itemgetter("comments"), reverse=True)for submission_dict in submission_dicts:    print("\nTitle:", submission_dict["title"])    print("Discussion link:", submission_dict["link"])    print("Comments:", submission_dict["comments"])

以下是输出结果:

Status code: 200200200-- snip --Title: Wells Fargo Hit with $1B in FinesDiscussion link: http://news.ycombinator.com/item?id=16886328Comments: 358Title: Want airline food? Take AmtrakDiscussion link: http://news.ycombinator.com/item?id=16882231Comments: 160-- snip --

5. 小结

目前已经完成了两个项目,这本书还剩最后一个Django项目,从下一篇开始,也是用三篇文章来初步了解Django,制作一个简单的web应用。

迎大家关注我的微信公众号"代码港" & 个人网站 ~

转载地址:http://jzdfo.baihongyu.com/

你可能感兴趣的文章
jQuery清空标签内容--防止内存泄露
查看>>
关于 HandlerMethodArgumentResolver 类 以及 WebArgumentResolver 类 自定义解析参数
查看>>
30个php操作redis常用方法代码例子
查看>>
设计模式:对问题行之有效的解决方式。其实它是一种思想。
查看>>
java异常—检查异常(checked exception)和未检查异常(unchecked exception)
查看>>
CodeForces 614B Gena's Code
查看>>
起床继续编程
查看>>
Thrift版本管理
查看>>
数据库备份那点事儿
查看>>
P2264 情书
查看>>
在C#代码中应用Log4Net(三)Log4Net中配置文件的解释
查看>>
雷林鹏分享:PHP 5 echo 和 print 语句
查看>>
各主流浏览器的区别
查看>>
Zigbee
查看>>
Android中Activity和Fragment与Fragment和Fragment之前互相传值方法
查看>>
阿里云搭建hadoop集群服务器,内网、外网访问问题(详解。。。)
查看>>
标记,上传并下载自己创建的镜像 image
查看>>
Struts2日期类型转换
查看>>
@synthesize和@dynamic分别有什么作用?
查看>>
ANDROID: NDK编程入门笔记
查看>>