python數(shù)據(jù)采集4-使用API

      網友投稿 991 2025-03-31

      文章目錄

      python數(shù)據(jù)采集4-使用API

      python數(shù)據(jù)采集4-使用API

      API概述

      API通用規(guī)則

      方法

      驗證

      服務器響應

      解析JSON數(shù)據(jù)

      python數(shù)據(jù)采集4-使用API

      API概述

      API 就是

      應用編程接口(Application Programming Interface,API)

      它們?yōu)椴煌膽?/p>

      用提供了方便友好的接口。不同的開發(fā)者用不同的架構,甚至不同的語言編寫軟件都沒問

      題——因為 API 設計的目的就是要成為一種通用語言,讓不同的軟件進行信息共享。

      瀏覽器輸入下面

      http://freegeoip.net/json/50.78.253.58

      1

      2

      3

      返回下面的數(shù)據(jù)

      { "ip": "50.78.253.58", "country_code": "US", "country_name": "United States", "region_code": "MA", "region_name": "Massachusetts", "city": "Boston", "zip_code": "02116", "time_zone": "America/New_York", "latitude": 42.3496, "longitude": -71.0746, "metro_code": 506 }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      你可能會想,這不就是在瀏覽器窗口輸入一個網址,按回車后獲取的(只是 JSON 格式)

      信息嗎?究竟 API 和普通的網址訪問有什么區(qū)別呢?如果不考慮 API 高大上的名稱,其實

      兩者沒啥區(qū)別。API 可以通過 HTTP 協(xié)議下載文件,和 URL 訪問網站獲取數(shù)據(jù)的協(xié)議一

      樣,它幾乎可以實現(xiàn)所有在網上干的事情。API 之所以叫 API 而不是叫網站的原因,其實

      是首先 API 請求使用非常嚴謹?shù)恼Z法,其次 API 用 JSON 或 XML 格式表示數(shù)據(jù),而不是

      HTML 格式

      API通用規(guī)則

      和大多數(shù)網絡數(shù)據(jù)采集的方式不同,API 用一套非常標準的規(guī)則生成數(shù)據(jù),而且生成的數(shù)

      據(jù)也是按照非常標準的方式組織的。因為規(guī)則很標準,所以一些簡單、基本的規(guī)則很容易

      學,可以幫你快速地掌握任意 API 的用法。

      不過并非所有 API 都很簡單,有些 API 的規(guī)則比較復雜,因此第一次使用一個 API 時,建

      議閱讀文檔,無論你對以前用過的 API 是多么熟悉。

      方法

      利用 HTTP 從網絡服務獲取信息有四種方式:

      GET

      POST

      PUT

      DELETE

      GET就是你在瀏覽器中輸入網址瀏覽網站所做的事情。當你訪問 http://freegeoip.net/

      json/50.78.253.58 時,就會使用 GET 方法。可以想象成 GET 在說:“喂,網絡服務器,請按

      照這個網址給我信息。”

      POST基本就是當你填寫表單或提交信息到網絡服務器的后端程序時所做的事情。每次當你

      登錄網站的時候,就是通過用戶名和(有可能加密的)密碼發(fā)起一個 POST 請求。如果你用

      API 發(fā)起一個 POST 請求,相當于說“請把信息保存到你的數(shù)據(jù)庫里”。

      PUT在網站交互過程中不常用,但是在 API 里面有時會用到。 PUT 請求用來更新一個對象

      或信息。例如,API 可能會要求用 POST 請求創(chuàng)建新用戶,但是如果你要更新老用戶的郵箱

      地址,就要用 PUT 請求了。

      DELETE用于刪除一個對象。例如,如果我們向 http://myapi.com/user/23 發(fā)出一個 DELETE 請

      求,就會刪除 ID 號是 23 的用戶。 DELETE 方法在公共 API 里面不常用,它們主要用于創(chuàng)建

      信息,不能隨便讓一個用戶去刪掉數(shù)據(jù)庫的信息。但是,和 PUT 方法一樣, DELETE 方法也

      值得了解一下。

      雖然在 HTTP 規(guī)范里還有一些信息處理方式,但是這四種基本是你使用 API 過程中可能遇

      到的全部。

      其實,很多 API 在更新信息的時候都是用 POST 請求代替 PUT 請求。究竟是創(chuàng)建一個新實體還是更新

      一個舊實體,通常要看 API 請求本身是如何構建的。不過,掌握兩者的差異還是有好處的,用 API

      的時候你經常會遇到 PUT 請求。

      驗證

      有些 API 要求客戶驗證是為了計算 API 調用的費用,或者是提供了包月的服務。有些驗證

      是為了“限制”用戶使用 API(限制每秒鐘、每小時或每天 API 調用的次數(shù)),或者是限

      制一部分用戶對某種信息或某類 API 的訪問。還有一些 API 可能不要求驗證,但是可能會為了市場營銷而跟蹤用戶的使用行為。

      例如,調用 The Echo Nest 音樂平臺的 API 獲取槍與玫瑰樂隊(Guns N’Roses)的歌曲:

      http://developer.echonest.com/api/v4/artist/songs?api_key=<你的api_key> %20&name=guns%20n%27%20roses&format=json&start=0&results=100

      1

      2

      這個鏈接向服務器提供的 api_key 是我注冊之后得到的,服務器會識別出這個鏈接發(fā)起的

      是 Ryan Mitchell(我)的請求,然后向請求者提供 JSON 格式的數(shù)據(jù)。

      令牌除了在 URL 鏈接中傳遞,還會通過請求頭里的 cookie 把用戶信息傳遞給服務器。我

      們將在本章后面和第 12 章更加詳細地介紹請求頭的內容,這里僅做簡單的演示,請求頭

      可以用前幾章使用的 urllib 包進行傳遞。

      token = "" webRequest = urllib.request.Request("http://myapi.com", headers={"token":token}) html = urlopen(webRequest)

      1

      2

      3

      4

      5

      6

      服務器響應

      API 有一個重要的特征是它們會反饋格式友好

      的數(shù)據(jù)。大多數(shù)反饋的數(shù)據(jù)格式都是 XML 和 JSON。

      這幾年,JSON 比 XML 更受歡迎,主要有兩個原因。首先,JSON 文件比完整的 XML 格

      式小。比如下面的 XML 數(shù)據(jù)用了 98 個字符:

      RyanMitchellKludgist

      1

      2

      3

      同樣的 JSON 格式數(shù)據(jù):

      {"user":{"firstname":"Ryan","lastname":"Mitchell","username":"Kludgist"}}

      1

      2

      3

      4

      5

      只要用 73 個字符,比表述同樣內容的 XML 文件要小 36%。

      JSON 格式比 XML 更受歡迎的另一個原因是網絡技術的改變。過去,服務器端用 PHP

      和 .NET 這些程序作為 API 的接收端。現(xiàn)在,服務器端也會用一些 javaScript 框架作為 API

      的發(fā)送和接收端,像 Angular 或 Backbone 等。雖然服務器端的技術無法預測它們即將收到

      的數(shù)據(jù)格式,但是像 Backbone 之類的 javaScript 庫處理 JSON 比處理 XML 要更簡單。

      雖然大多數(shù) API 都支持 XML 數(shù)據(jù)格式,但在本書中我們還是用 JSON 格式。當然,如果

      你還沒有把兩種格式都掌握,那么現(xiàn)在熟悉它們是個好時機——短期內它們都不會消失。

      解析JSON數(shù)據(jù)

      我用過 freegeoip.net 網站 IP 查詢的例子,可以把 IP 地址解析轉換成地

      理位置:

      http://freegeoip.net/json/50.78.253.58

      1

      2

      我可以獲取這個請求的反饋數(shù)據(jù),然后用 Python 的 JSON 解析函數(shù)來解碼

      # -*- coding: utf-8 -*- """ Created on Mon Jan 29 22:37:29 2018 @author: szm """ import json from urllib.request import urlopen def getCountry(ipAddress): response = urlopen("http://freegeoip.net/json/"+ipAddress).read().decode('utf-8') responseJson = json.loads(response) return responseJson.get("country_code") print(getCountry("50.78.253.58"))

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      返回結果如下

      US

      1

      2

      3

      這里用的 JSON 解析庫是 Python 標準庫的一部分。只需要在代碼開頭寫上 import json ,

      你就可以使用它了!不同于那些需要先把 JSON 解析成一種 JSON 對象或 JSON 節(jié)點的語

      言,Python 使用了一種更加靈活的方式,把 JSON 轉換成字典,JSON 數(shù)組轉換成列表,JSON 字符串轉換成 Python 字符串。通過這種方式,就可以讓 JSON 的獲取和操作變得非

      常簡單。

      下面的例子演示了如何使用 Python 的 JSON 解析庫,處理 JSON 字符串中可能出現(xiàn)的不同

      數(shù)據(jù)類型:

      # -*- coding: utf-8 -*- """ Created on Mon Jan 29 22:37:29 2018 @author: szm """ import json jsonString = '{"arrayOfNums":[{"number":0},{"number":1},{"number":2}],"arrayOfFruits":[{"fruit":"apple"},{"fruit":"banana"},{"fruit":"pear"}]}' jsonObj = json.loads(jsonString) print(jsonObj.get("arrayOfNums")) print(jsonObj.get("arrayOfNums")[1]) print(jsonObj.get("arrayOfNums")[1].get("number")+jsonObj.get("arrayOfNums")[2].get("number")) print(jsonObj.get("arrayOfFruits")[2].get("fruit"))

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      返回結果

      [{'number': 0}, {'number': 1}, {'number': 2}] {'number': 1} 3 pear

      1

      2

      3

      4

      5

      6

      第一行是一個組詞典構成的列表對象,第二行是一個詞典對象,第三行是一個整數(shù)(第一

      行詞典列表里整數(shù)的和),第四行是一個字符串。

      API Python

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:表格怎么插圖?(表格怎么插圖片大小怎么批量調整)
      下一篇:go語言操作excel
      相關文章
      国产成人+综合亚洲+天堂| 国产亚洲精aa在线看| 亚洲精品无码99在线观看| 亚洲国产AV无码一区二区三区 | 亚洲国产美女精品久久久久| 亚洲av伊人久久综合密臀性色| 亚洲欧洲日产国码高潮αv| 亚洲成年人啊啊aa在线观看| 亚洲精品尤物yw在线影院| 亚洲国产日韩在线观频| 亚洲国产综合久久天堂| 亚洲成a人片在线观看老师| 亚洲成a人片在线观看久| 国产精品亚洲精品日韩已方| 久久久久亚洲av成人无码电影 | 国产亚洲精品成人AA片| 亚洲欧美国产精品专区久久| 亚洲一日韩欧美中文字幕在线 | 国产亚洲一区二区在线观看| 亚洲国产精品无码专区在线观看| 久久精品国产69国产精品亚洲| 久久精品国产99精品国产亚洲性色| 亚洲AV永久精品爱情岛论坛| 久久亚洲精品成人AV| 亚洲国产精品yw在线观看| 亚洲伊人久久大香线蕉啊| 亚洲区日韩精品中文字幕| 国产亚洲综合精品一区二区三区| 亚洲国产精品一区二区第四页| 在线A亚洲老鸭窝天堂| 久久久亚洲精品无码| 久久精品国产精品亚洲毛片| 亚洲人成网站在线观看播放青青| 中文字幕在线日亚洲9| 亚洲av中文无码字幕色不卡| 亚洲av无码成人精品区在线播放 | 7777久久亚洲中文字幕| 亚洲精品成a人在线观看夫| 亚洲福利视频一区二区| 亚洲人成人无码网www电影首页| 久久精品夜色国产亚洲av|