调用API获取深圳市的公开大数据集——以高速公路ETC入深圳数据为例
https://opendata.sz.gov.cn/data/api/toApiDetails/29200_00403621
從上圖可知,深圳市政府開放數據平臺為每一個數據集提供了一個接口地址,并且只需要輸入三個參數即可調用數據:appKey、page和rows。首先我們先“提交應用名稱”和訂閱接口以獲取一個appKey,其實就是獲取一個專屬秘鑰。其次,我們進入“測試接口”網頁,見下圖:
根據上圖可知,在完成之前的步驟后,只需要確定“請求方式”和“API參數”后,我們點擊藍色的“發送請求”即可返回相應的內容。下面分別對“請求方式”和“API參數”進行分析。
用過爬蟲的人都知道,最常用的網頁請求方式就是get和post兩種方式:
get:最常用的請求方式,一般用以獲取或查詢資源信息,也是大多數網站使用的方式,響應速度快;
post:相比于get方式,多了以表單形式上傳的功能,因此除了查詢信息外,還可以修改信息。
其次,上述的“API參數”需要輸入兩個值,分別為“page”和“rows”:
page:確定你要查詢第幾個頁文件。例如,營運車輛GPS數據共有176578條,一般來說會將這么大的數據量分成幾個部分,比如說分成100個部分,這樣每個部分的數據量就不會過大,這里的說的部門就是“page”。
rows:確定你要在每個“page”里面存放多少行數據。例如上面的rows=2,就是第二個page里面只存儲2行數據。
一般而言,page和rows是根據網頁API的限制來定義的,設定每個page存儲1000行,這共需要177個page(176578/1000=176.578)。
3 基于Python+MySQL工具的營運車輛GPS數據的批量獲取
通過我們上面的分析,我們知道了營運車輛GPS數據的API調用原理,那么我們如何通過Python來進行批量數據獲取呢?下面們將詳細介紹這一實現過程。上述提到深圳市政府開放平臺均支持get和post的請求方式獲取數據,因為本文就用簡單的get請求方式。用get方式獲取數據需要調用request庫中的get方法,所以讀者需要先安裝這個包。用法如下:
首先將之前的appKey和請求參數合并成一個url:
# url url1 = 'https://opendata.sz.gov.cn/api/29200_00403621/1/service.xhtml?page=' url2 = str(page) url3 = '&rows=10000' url4 = '&appKey=XXX' url = url1+url2+url3+url4將獲取到的數據存到strhtml變量中:
strhtml = requests.get(url)這時候的strhtml代表整個網頁的數據,但是我們只需要里面的源碼,輸入以下語句獲取源碼:
strhtml.text獲取源碼以后,我們需要對其進行解析,轉換為json格式:
dic = strhtml.json()運行完這幾個語句后,我們發現我們獲取到了page1的5000行數據,他包含在dic的data鍵,是一個包含5000個元素的list。
由于上述代碼只獲取到page=1時的數據,如果我們需要獲取全部頁面的數據,則需要增加如下步驟:
- 增加一個循環,對每個頁面的數據進行獲取;
- 其次,由于獲取的數據可讀性較差,我們可以將獲取的數據轉換為DataFrame格式;
- 因為數據量較大,2133696行,故我們采取每讀取一個page就將其存入到MySQL數據中。
總結
以上是生活随笔為你收集整理的调用API获取深圳市的公开大数据集——以高速公路ETC入深圳数据为例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 访问https,抛出的异常javax.n
- 下一篇: 【调剂】东北石油大学计算机科学与技术专业