官术网_书友最值得收藏!

1.4 來自API的數據

API(Application Programming Interface,應用程序接口)是軟件程序或者網絡服務與外界進行交互的接口,通過它可以得到程序或者網站所提供的一些數據。對API的更詳細介紹,可以參閱:https://en.wikipedia.org/wiki/Application_programming_interface

port可譯為“端口”“接口”,通常用于硬件;interface可譯為“界面”“接口”,一般指抽象化的中介物。

基礎知識

網站提供API讓開發者調用有關數據,已經是比較普遍的商業現象。此處列舉簡單的示例,讓讀者初步了解相關技能。

①所訪問的是github.com網站提供的API,通過它獲得用戶名為qiwsir的用戶在github.com上有關信息——qiwsir是本書作者在github.com網站的用戶名。

從Out[1]的結果可知,①的訪問請求成功了。

在1.3節演示爬蟲技術的時候,曾經使用返回對象的text屬性,得到了返回內容的字符串,即所得頁面的源碼。在In[2]中也可以通過text屬性得到一個字符串,不過,對于API而言,一般得到的是JSON格式的數據,In[2]調用了返回對象的json方法,Out[2]顯示的為其結果。

對于JSON格式的數據,可以認為是半格式化的數據,為了在數據分析和機器學習中使用,通常要從中選出所需要的部分,并保存為結構化數據,比如保存到CSV文件。

JSON(JavaScript Object Notation,JavaScript對象表示法)是輕量級的文本數據交換格式,獨立于語言。JSON解析器和JSON庫支持許多不同的編程語言。

②得到了JSON格式的數據,然后用③及其后面的語句從中抽取出所需要的部分,并將它們定義為DataFrame類型的數據(如④)——這是結構化的數據。

以上示例只是從通過API中得到了一個用戶(qiwsir)的有關信息,如果有多個用戶,則可以通過循環語句向github.com提交多次請求——修改In[1]的①中請求地址(https://api.github.com/users/{user}的{user}值為用戶名)。

項目案例

1.項目描述

本地新聞API:https://news.baidu.com/widget?id=LocalNews&ajax=json

利用此API,完成下述操作:

●得到本地新聞。

●將新聞標題、URL保存到CSV文檔中。

URL包括以下各項。

1.協議:http:,代表網頁使用的是HTTP協議。“https:”后面的“//”為分隔符。

2.域名:“news.baidu.com”。

3.端口:端口不是一個URL必需的部分,如果省略端口部分,則采用默認端口80。

4.虛擬目錄:指域名后面的“/”,widget為目錄名稱。

5.參數:以“?”表示,id為參數,值為LocalNews。如果有多個參數,則用“&”作為分隔符。

2.實現過程

執行In[4]代碼,得到了變量local_news所引用的JSON對象。建議讀者執行此程序,并顯示local_news的完整內容,通過分析其結構,以確定如何得到新聞標題和URL。

In[5]的⑤就是在對In[4]所得的JSON數據進行分析之后,得到所有的新聞列表,然后用循環語句取出每條新聞,并將其中的部分內容追加到一個空DataFrame中(如⑥所示)。

很多網站都向開發者提供了豐富的API,在網站之外的應用中調用本網站的有關數據。通常,網站都會提供比較完整的API相關文檔,開發者應首先認真閱讀文檔,根據有關規定向網站提交請求后才能得到正確的回復信息。

動手練習

1.利用下面的API,查詢任意指定日期對應的農歷和相關其他信息。

使用requests的get請求此API,要增加headers參數。

API地址為https://www.sojson.com/open/api/lunar/json.shtml?date={data},data的格式為“年-月-日”,例如https://www.sojson.com/open/api/lunar/json.shtml?date=2019-07-28

2.創建一個Python列表,其中的元素為國內部分城市名稱(數量自定)。然后在網上找一個提供城市經緯度的API,獲得每個城市的經緯度數值,并保存到CSV文檔中。

擴展探究

大型網站一般都有“開放平臺”,其中會包含多方面的API,以便開發者使用。請讀者根據自己的興趣,選擇一個網站的“開放平臺”,并深入研究其中的API使用方法,并獲得某些有價值的數據。

主站蜘蛛池模板: 五常市| 丰宁| 高州市| 出国| 克山县| 义乌市| 忻州市| 海晏县| 涿州市| 白河县| 郯城县| 池州市| 平泉县| 板桥市| 德州市| 山阴县| 玛沁县| 淳安县| 河西区| 慈利县| 甘肃省| 永嘉县| 宝丰县| 青浦区| 安塞县| 莱西市| 伊通| 四会市| 深泽县| 洪泽县| 西乡县| 齐河县| 濮阳市| 丹巴县| 山阳县| 温泉县| 吉林省| 马鞍山市| 湛江市| 略阳县| 若羌县|