资讯专栏INFORMATION COLUMN

Python学习之路16-使用API

lansheng228 / 3029人阅读

摘要:本篇是数据处理的第三篇,本篇将使用应用程序接口自动请求网站的特定信息并可视化。前言本将需要用到模块来请求网站数据。使用可视化仓库使用一个参数配置类来定义图表的参数,并自定义图表中每个条形的描述信息,并给这些条形添加网址链接。

《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("
Keys:", len(repo_dict))
for key in sorted(repo_dict.keys()):
    print(key)
    
# 结果:
Status code: 200
Total repositories: 2563652
Repositories returned: 30

Keys: 72
archive_url
archived
assignees_url
blobs_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的速率限制可以访问 https://api.github.com/rate_l... 访问,时间是“每分钟”。

3. 使用Pygal可视化仓库

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

import requests
import pygal
from 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 = False
my_config.title_font_size = 24
my_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 = False
my_config.width = 1000

chart = pygal.Bar(my_config, style=my_style)
chart.title = "Most-Starred Python Projects on GitHub"
chart.x_labels = names

chart.add("", plot_dicts)
chart.render_to_file("python_repos.svg")

得到如下表格:

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

4. Hacker News API

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

import requests
from 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("
Title:", submission_dict["title"])
    print("Discussion link:", submission_dict["link"])
    print("Comments:", submission_dict["comments"])

以下是输出结果:

Status code: 200
200
200
-- snip --

Title: Wells Fargo Hit with $1B in Fines
Discussion link: http://news.ycombinator.com/item?id=16886328
Comments: 358

Title: Want airline food? Take Amtrak
Discussion link: http://news.ycombinator.com/item?id=16882231
Comments: 160

-- snip --
5. 小结

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


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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44723.html

相关文章

  • scrapy学习之路4.1(SQLAlchemy的使用)(未完)

    摘要:是编程语言下的一款框架,该框架建立在数据库之上,使用关系对象映射进行数据库操作,简言之便是将对象转换成,然后使用数据执行并获取执行结果。正确使用的前提是了解关系数据库的原理。就是把数据库表的行与相应的对象建立关联,互相转换。 sqlalchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使...

    shengguo 评论0 收藏0
  • Python全栈之路系列之数字数据类型

    摘要:数字在中,整型长整型浮点数负数布尔值等都可以称之为数字类型。数字类型的复杂度整数比浮点数简单浮点数比复数简单。布尔类型布尔类型其实就是数字和的变种而来,即真或假,实际上就是内置的数字类型的子类而已。 上篇文章中我们简单的体验了Python语言基本概念与语法,那么在继续深入下去的过程中,不妨先学习几个常见的Python内置数据类型?这也是大部分Python教科书的学习目录,由浅至深,慢慢...

    Developer 评论0 收藏0
  • Python 进阶之路 (十一) 再立Flag, 社区最全的itertools深度解析(下)

    摘要:将每一行作为返回,其中是每行中的列名。对于每一行,都会生成一个对象,其中包含和列中的值。它返回一个迭代器,是迭代结果都为的情况。深度解析至此全剧终。 简单实战 大家好,我又来了,在经过之前两篇文章的介绍后相信大家对itertools的一些常见的好用的方法有了一个大致的了解,我自己在学完之后仿照别人的例子进行了真实场景下的模拟练习,今天和大家一起分享,有很多部分还可以优化,希望有更好主意...

    tomorrowwu 评论0 收藏0
  • Python学习之路23-文本和字节序列

    摘要:字符编码表,码位码元将编码字符集中的码位转换成有限比特长度的整型值的序列。字符编码方案,码元序列化也称为常说的序列化。每个字节里的二进制数就是字节序列。另一个情况则是压缩字节序列的值,如或进程长度编码等无损压缩技术。 《流畅的Python》笔记。本篇主要讲述不同编码之间的转换问题,比较繁杂,如果平时处理文本不多,或者语言比较单一,没有多语言文本处理的需求,则可以略过此篇。 1. 前言 ...

    anRui 评论0 收藏0
  • Python学习之路3-操作列表

    摘要:本章内容主要是对列表的进一步操作,以及初识元组数据结构。列表非常适合用于存储在程序运行期间可能变化的数据集,列表可以被修改。代码结果相比于列表,元组是更简单的数据结构。 《Python编程:从入门到实践》笔记。本章内容主要是对列表的进一步操作,以及初识元组数据结构。 1. 遍历列表 本章主要是for循环: # 代码: magicians = [alice, david, carolin...

    makeFoxPlay 评论0 收藏0

发表评论

0条评论

lansheng228

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<