當前位置:
首頁 > 最新 > 三月內容-API實例入門

三月內容-API實例入門

三月的內容,programming這個部分按計劃是寫python和API的主題。

〇、寫在前面

最近Facebook關於API開源泄露了5kw用戶的數據使其虧損嚴重。我也是仔細看了好多相關的分析。正好這個月的也利用工作之餘研究了一些API的東西。在此寫一篇短小的記錄。感覺入門起來有點難,因為很多是網頁上的基礎知識,再加上很多都要註冊付費以獲取密碼,本章沒有自己寫出東西來,都是研究別人寫好的代碼,做一些簡單的總結。

一、什麼是API?

API是應用編程介面applicationprogramming interface。一般來說,大型公司都會提供一個API為使用者和開發者提供便利。有的免費,有的收費。

二、基礎準備-JSON庫

調用API伺服器返回的是JSON格式的數據。可以通過python自帶的JSON庫進行解析。

JSON庫可以將JSON數據轉換為字典,JSON數組轉換成列表,從而方便操作。

三、API的用法

可以通過公司發布的API介面說明進行操作。基本能在大網站里公布API的都會有應用實例。

(不是所有API的介面都可以用在python中)

在使用中,常常需要key,有些是免費的,有些是付費的。其實花點錢對我來說沒什麼,主要是我發現幾個大的網站API都要實名認證,還要24H。我實在是不想做。

而且書中公布的幾個API都已經下架了,造成了很大學習難度。我索性就從網上找到了兩個比較入門的API實例進行學習。

四、實例講解。

本章的學習真的對我來說痛苦,沒有web的知識。官方書里的API內容已經在API商店裡下架了。本來想學兩個實例後自己做一個大型的項目,然而學了兩個實例我已經不行了——基礎知識還不夠。一句句學都還是有幾句看不懂的,更別說自己寫了。

所以這次的文章,我就引用兩位前輩公開的代碼,和數據爬取結果。一句句解析翻譯,其中有些由於版本(py2和py3),網站自身源代碼有變動,所以本人做了一些蹩腳的小修改。

最後結果為1是一個豆瓣圖書信息的爬取程序。

2是一個網站的用戶地理位置信息的爬取+BDP地理經緯圖繪製。

(本文非商業用途,只為學習者參考交流

感謝兩位公布代碼的前輩:1CSDNBlog作者MTbaby;2簡書作者:橄欖的世界);

案例一:

利用豆瓣API查詢豆瓣書籍信息。(最入門的)

準備基礎:API地址:"https://api.douban.com/v2/book/"

解析代碼:

# #coding:utf-8

#編碼方式是utf-8

importjson

importurllib

importrequests

#引用3個庫

foriinrange(1220564,1220580):

#i的循環,方便之後構造URL。

#url地址

url="https://api.douban.com/v2/book/"

#api的url百度

values=str(i)

#將參數轉化為字元串,方便組裝url

url=url+values

#進行參數封裝

response=urllib.request.urlopen(url)

#訪問網頁

#json解析:

html=json.loads(response.read().decode("utf-8"))

#列印所需數據,這裡python3print的列印方法是括弧。

print("書名:",html["title"])

print(html["author"])

print("出版日期:",html["pubdate"])

print("概述:",html["summary"])

print("價格:",html["price"])

print("xxxx")

#分隔符

i=i+1

#循環

結果圖是:

實例2:

研究糗事百科網站首頁人的地理信息,並用熱力圖進行表示。

代碼以及每行的解釋:

importrequests

fromlxmlimportetree

importjson

importcsv

importtime

#引用幾個庫

defget_url(url): #定義函數

r=requests.get(url,headers=headers) #請求網頁,加入表頭

print(r.status_code) #寫下狀態代碼200,其實沒必要

html=etree.HTML(r.text) #利用xptah解析網頁文本內容

url_infos=html.xpath("//div[@class="author clearfix"]")#循環的大層次

user_link_list= [] #用戶連接的列表

forurl_infoinurl_infos: #循環用戶信息

user_part_link=url_info.xpath("a[1]/@href")#可以加一個print,來查看具體調出來的iurl#--結果是:user_number:

實際這一行爬出來的是我黃色圈出來的部分。仔細看一下用戶的信息URL就是在網站後+users/number。 因此這是構造下一級網頁的關鍵。

print(user_part_link) #列印一下爬的內容,我用來學習代碼

iflen(user_part_link)!=: #介紹一下!是反向邏輯操作。,因此,也可以去掉後if len() = 1

user_part_link=user_part_link[] #這兩行是構造下一級菜單的函數

user_link="https://www.qiushibaike.com"+user_part_link

user_link_list.append(user_link) #添加到列表中

else:

pass #否則pass

returnuser_link_list #返回列表

defget_address(url): #定義地址函數

r=requests.get(user_link,headers=headers) #請求鏈接+報頭

print(r.status_code) #可以省略,200

html=etree.HTML(r.text)

ifhtml.xpath("//div[2]/div[3]/div[2]/ul/li[4]/text()"): #xpath爬取用戶信息

address=html.xpath("//div[2]/div[3]/div[2]/ul/li[4]/text()")[].split("· ")[]

get_geo(address)

else:

pass

defget_geo(address):

par={"address":address,"key":"cb649a25c1f81c1451adbeca73623251"}

url="http://restapi.amap.com/v3/geocode/geo"

r=requests.get(url, par)

#API調用過程

json_data=json.loads(r.text) #Json解析數據

try:

geo=json_data["geocodes"][]["location"] #解析並獲取一下地理信息數據

longtitude=geo.split(",")[]#經度 #分割經緯度

latitude=geo.split(",")[1]#緯度

writer.writerow((address, longtitude, latitude)) #寫入CSV文件

# print(address,longtitude,latitude)

exceptIndexError: #出現錯誤就pass

pass

if__name__=="__main__": #主程序入口

f=open("F://map7.csv","w",newline="") #打開存儲位置

writer=csv.writer(f) #寫入存儲位置的csv文件

writer.writerow(("地址","經度","緯度")) #文件里表頭

headers={

"user-agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3294.6 Safari/537.36"}

url_list= ["https://www.qiushibaike.com/text/page/{}/".format(i)foriinrange(1,30)] #表頭和URL鏈接

forurlinurl_list: #定義循環

user_link_list=get_url(url)

foruser_linkinuser_link_list:

address=get_address(user_link)

f.close()

程序運行的結果是csv文件,記錄了用戶的地理信息。此處由於我流量有限,爬取了只有幾十行的信息。結果圖如下:

第二步,我要通過一個叫BDP的數據可視化工具,在地圖上顯示。

BDP是一個數據分析可視化軟體,在線使用,製圖功能還挺強的,有各種demo可以用。

打開BDP工具,在工作表中創建經緯圖。然後添加進去csv文件。如圖:

然後進入作圖界面,將地址的csv文件拖入地圖,即可生成結果。我生成了一個熱力圖。

主要內容使爬取網站第一頁中的作者地理位置分布。

不足在於:我在單位使用手機流量給電腦熱點爬取的,所以數據量挺少的。如果有多一點的數據,可以更清晰的看到一些分布情況。

熱力圖輸出結果:

本月作者繼續忙碌,畢業論文,複習,駕照,實習,上課。數據分析是個人愛好和研究生將學的方向。

下個月準備在計算機學習上的時間一半用來繼續研究API,再研究兩個用python寫API的實例,另一半時間進入資料庫的學習。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Bene的學習計劃 的精彩文章:

TAG:Bene的學習計劃 |