日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

调用API获取深圳市的公开大数据集——以高速公路ETC入深圳数据为例

發布時間:2024/1/18 编程问答 81 豆豆
生活随笔 收集整理的這篇文章主要介紹了 调用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數據中。
import requests import json import pandas as pd import pymysql from sqlalchemy import create_engine# 初始化數據庫連接 # 按實際情況依次填寫MySQL的用戶名、密碼、IP地址、端口、數據庫名, #一般而言只需要將下面的name和password替換即可 engine = create_engine('mysql+pymysql://name:password@localhost:3306/sample_veh_gps')for page in range(1,428):print(page)pd_data = pd.DataFrame()# urlurl1 = 'https://opendata.sz.gov.cn/api/29200_00403621/1/service.xhtml?page='url2 = str(page)url3 = '&rows=10000'url4 = '&appKey=c24286fbd4754aff9d099d1cec484343'url = url1+url2+url3+url4strhtml = requests.get(url)strhtml.encoding = 'utf8'dic = strhtml.json()for i in range(0,len(dic['data'])):pd_temp = pd.DataFrame.from_dict(dic['data'][i],orient='index').Tpd_data = pd_data.append(pd_temp,ignore_index=True)try:pd_data.to_sql('veh_gps',engine,index=False,if_exists='append')except Exception as e:print(e)

總結

以上是生活随笔為你收集整理的调用API获取深圳市的公开大数据集——以高速公路ETC入深圳数据为例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。