摘要:本篇是數(shù)據(jù)處理的第三篇,本篇將使用應(yīng)用程序接口自動請求網(wǎng)站的特定信息并可視化。前言本將需要用到模塊來請求網(wǎng)站數(shù)據(jù)。使用可視化倉庫使用一個參數(shù)配置類來定義圖表的參數(shù),并自定義圖表中每個條形的描述信息,并給這些條形添加網(wǎng)址鏈接。
《Python編程:從入門到實踐》筆記。1. 前言
本篇是Python數(shù)據(jù)處理的第三篇,本篇將使用Web應(yīng)用程序接口自動請求網(wǎng)站的特定信息并可視化。
本將需要用到requests模塊來請求網(wǎng)站數(shù)據(jù)。主要內(nèi)容如下:
向GitHub請求項目數(shù)據(jù),按星排序;
使用pygal可視化上述數(shù)據(jù);
調(diào)用Hacker News的API
2. GitHub repositories獲取GitHub中倉庫的描述信息,并按星數(shù)排序:
# 代碼: import requests # 執(zhí)行API調(diào)用并存儲響應(yīng),注意不要輸錯了! url = "https://api.github.com/search/repositories?q=language:python&sort=stars" r = requests.get(url) print("Status code:", r.status_code) # 將API響應(yīng)存儲在一個變量中 response_dict = r.json() print("Total repositories:", response_dict["total_count"]) # 探索有關(guān)倉庫的信息 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) # 結(jié)果: Status code: 200 Total repositories: 2563652 Repositories returned: 30 Keys: 72 archive_url archived assignees_url blobs_url -- snip --
有些請求可能并不能成功,可能需要你的個人授權(quán)碼:
headers = {"Authorization":"your perosonal token"} url = "https://api.github.com/search/repositories?q=language:python&sort=stars" r = requests.get(url, headers=headers)
大多數(shù)API都存在速率限制,即特定時間內(nèi)可執(zhí)行的請求數(shù)。對于GitHub的速率限制可以訪問 https://api.github.com/rate_l... 訪問,時間是“每分鐘”。
3. 使用Pygal可視化倉庫使用一個參數(shù)配置類來定義圖表的參數(shù),并自定義圖表中每個條形的描述信息,并給這些條形添加網(wǎng)址鏈接。
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 = { # 每個數(shù)據(jù)的值 "value": repo_dict["stargazers_count"], # 自定義每個數(shù)據(jù)的描述信息 # 原文中沒有將其轉(zhuǎn)換成str,報錯;可能現(xiàn)在數(shù)據(jù)類型更改了? "label": str(repo_dict["description"]), # 為每個條添加網(wǎng)址鏈接 "xlink": repo_dict["html_url"], } plot_dicts.append(plot_dict) # 可視化 my_style = LS("#333366", base_style=LCS) # 圖表配置類 my_config = pygal.Config() # x軸標(biāo)簽順時針旋轉(zhuǎn)45度 my_config.x_label_rotation = 45 # 不顯示圖例 my_config.show_legend = False my_config.title_font_size = 24 my_config.label_font_size = 14 # 主標(biāo)簽大小,y軸 my_config.major_label_font_size = 18 # x軸標(biāo)簽最長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")
得到如下表格:
現(xiàn)在每一個數(shù)據(jù)都有自己的描述信息,并且點擊它們還能跳到它們的項目網(wǎng)站。注意左側(cè)y軸上的刻度,書中的刻度很密集,但同樣的代碼在這里不知道為什么很稀疏,所以這里沒有體現(xiàn)出第34行代碼的效果。
4. Hacker News APIHacker News的API能讓你訪問該網(wǎng)站所有文章和評論的信息,且不用注冊獲取秘鑰。下面通過一個API調(diào)用獲取其上當(dāng)前熱門文章的ID,再查看前30篇文章(有可能訪問不了,至于原因以及具體怎么做,你懂的):
import requests from operator import itemgetter # 執(zhí)行API調(diào)用并存儲響應(yīng) url = "https://hacker-news.firebaseio.com/v0/topstories.json" r = requests.get(url) print("Status code:", r.status_code) # 處理有關(guān)每篇文章的信息 submission_ids = r.json() submission_dicts = [] for submission_id in submission_ids[:30]: # 對于每篇文章,都執(zhí)行一個API調(diào)用 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"])
以下是輸出結(jié)果:
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. 小結(jié)
目前已經(jīng)完成了兩個項目,這本書還剩最后一個Django項目,從下一篇開始,也是用三篇文章來初步了解Django,制作一個簡單的web應(yīng)用。
迎大家關(guān)注我的微信公眾號"代碼港" & 個人網(wǎng)站 www.vpointer.net ~
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/44723.html
摘要:是編程語言下的一款框架,該框架建立在數(shù)據(jù)庫之上,使用關(guān)系對象映射進行數(shù)據(jù)庫操作,簡言之便是將對象轉(zhuǎn)換成,然后使用數(shù)據(jù)執(zhí)行并獲取執(zhí)行結(jié)果。正確使用的前提是了解關(guān)系數(shù)據(jù)庫的原理。就是把數(shù)據(jù)庫表的行與相應(yīng)的對象建立關(guān)聯(lián),互相轉(zhuǎn)換。 sqlalchemy是Python編程語言下的一款ORM框架,該框架建立在數(shù)據(jù)庫API之上,使用關(guān)系對象映射進行數(shù)據(jù)庫操作,簡言之便是:將對象轉(zhuǎn)換成SQL,然后使...
摘要:數(shù)字在中,整型長整型浮點數(shù)負數(shù)布爾值等都可以稱之為數(shù)字類型。數(shù)字類型的復(fù)雜度整數(shù)比浮點數(shù)簡單浮點數(shù)比復(fù)數(shù)簡單。布爾類型布爾類型其實就是數(shù)字和的變種而來,即真或假,實際上就是內(nèi)置的數(shù)字類型的子類而已。 上篇文章中我們簡單的體驗了Python語言基本概念與語法,那么在繼續(xù)深入下去的過程中,不妨先學(xué)習(xí)幾個常見的Python內(nèi)置數(shù)據(jù)類型?這也是大部分Python教科書的學(xué)習(xí)目錄,由淺至深,慢慢...
摘要:將每一行作為返回,其中是每行中的列名。對于每一行,都會生成一個對象,其中包含和列中的值。它返回一個迭代器,是迭代結(jié)果都為的情況。深度解析至此全劇終。 簡單實戰(zhàn) 大家好,我又來了,在經(jīng)過之前兩篇文章的介紹后相信大家對itertools的一些常見的好用的方法有了一個大致的了解,我自己在學(xué)完之后仿照別人的例子進行了真實場景下的模擬練習(xí),今天和大家一起分享,有很多部分還可以優(yōu)化,希望有更好主意...
摘要:字符編碼表,碼位碼元將編碼字符集中的碼位轉(zhuǎn)換成有限比特長度的整型值的序列。字符編碼方案,碼元序列化也稱為常說的序列化。每個字節(jié)里的二進制數(shù)就是字節(jié)序列。另一個情況則是壓縮字節(jié)序列的值,如或進程長度編碼等無損壓縮技術(shù)。 《流暢的Python》筆記。本篇主要講述不同編碼之間的轉(zhuǎn)換問題,比較繁雜,如果平時處理文本不多,或者語言比較單一,沒有多語言文本處理的需求,則可以略過此篇。 1. 前言 ...
摘要:本章內(nèi)容主要是對列表的進一步操作,以及初識元組數(shù)據(jù)結(jié)構(gòu)。列表非常適合用于存儲在程序運行期間可能變化的數(shù)據(jù)集,列表可以被修改。代碼結(jié)果相比于列表,元組是更簡單的數(shù)據(jù)結(jié)構(gòu)。 《Python編程:從入門到實踐》筆記。本章內(nèi)容主要是對列表的進一步操作,以及初識元組數(shù)據(jù)結(jié)構(gòu)。 1. 遍歷列表 本章主要是for循環(huán): # 代碼: magicians = [alice, david, carolin...
閱讀 1796·2021-09-26 09:46
閱讀 3056·2021-09-22 15:55
閱讀 2640·2019-08-30 14:17
閱讀 3060·2019-08-26 11:59
閱讀 1843·2019-08-26 11:35
閱讀 3181·2019-08-26 10:45
閱讀 3180·2019-08-23 18:28
閱讀 1199·2019-08-23 18:21