怎么获取web开发怎么获取手机的唯一标识_PYTHON实现北京住宅小区数据抓取-(Web服务API-地点检索服务)
最近工作需要整理了一些百度地圖接口查詢北京住宅小區的相關信息。該篇文章主要從如下3個方面的說明:Web服務API -地點檢索服務、需求分析 和 PYTHON實現 。
Web服務API -地點檢索服務:
鏈接:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-placeapi
API接口服務
該服務提供多種場景的地點(POI)檢索功能,包括行政區劃區域檢索、圓形區域檢索、矩形區域檢索。開發者可通過接口獲取地點(POI)基礎或詳細地理信息。
- 行政區劃區域檢索:檢索某一行政區劃內(目前最細到城市級別)的地點信息。
- 圓形區域檢索:設置圓心和半徑,檢索圓形區域內的地點信息(常用于周邊檢索場景)。
- 矩形區域檢索:設置檢索區域左下角和右上角坐標,檢索坐標對應矩形內的地點信息(常用于手機或PC端地圖視野內檢索)
- 地點詳情檢索:不同于以上三種檢索功能。地點詳情檢索針對指定POI,檢索其相關的詳情信息。開發者可以通過三種區域檢索(或其他服務)功能,獲取POI id。使用“地點詳情檢索”功能,傳入id,即可檢索POI詳情信息,如評分、營業時間等(不同類型POI對應不同類別詳情數據)。
需求分析
需求內容:抓取全北京的住宅小區的數據,通過分析接口有單次返回記錄數 和 最大分頁為20的限制,因此采用 矩形區域檢索 來抓取相關數據。
矩形區域檢索請求接口:http://api.map.baidu.com/place_abroad/v1/search?query=房地產&page_size=10&page_num=0&scope=2&bounds=35.66597,139.797339,35.677669,139.813544&output=json&ak={您的密鑰} //GET請求
該接口重點輸入參數:
PYTHON代碼實現
首先將北京劃分成40*40 的柵格,一個一個柵格進行數據抓取,再通過解析獲取最終數據。
具體代碼實現如下:
# -*- coding: utf-8 -*-import numpy as np # 導入數值計算擴展模塊import pandas as pdimport requests # 導入網頁請求模塊import time, mathunit = 40 #40*40個柵格lat_partion = [round(x,6) for x in list(np.linspace(39.340000,41.180000, unit))] # 維度劃分,保留6位小數lng_partion = [round(y,6) for y in list(np.linspace(115.420000,117.500000, unit))] # 經度劃分,保留6位小數community_data_list = []def get_community(): # 自定義按區域獲取小區名稱的函數 for i in range(7, 39): # 橫向柵格索引 # time.sleep(10) for j in range(0, 39): # 縱向柵格索引 not_max_page = True # 沒有到達最大頁面時循環 page_num = 0 # 從第一頁開始 while not_max_page: url = "http://api.map.baidu.com/place/v2/search?query=房地廠&scope=2&page_size=20&page_num=" + str(page_num) + " &bounds=" + str(lat_partion[i]) + "," + str(lng_partion[j])+"," + str(lat_partion[i+1]) + "," + str(lng_partion[j+1]) + "&output=json&ak={您的密鑰}" # 構造請求網址,其中你的ak是你要向百度申請的密鑰 header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'} # 構造請求頭 response = requests.get(url, headers = header) # 發出請求 time.sleep(1) print(str(lat_partion[i]) ,str(lng_partion[j]), str(lat_partion[i+1]) , str(lng_partion[j+1])) answer = response.json() # json化 total = int(answer["total"]) max_page = math.ceil(total / 20) if answer['status'] == 0: # 如果正常返回 print("# Rectangle (%d,%d) Page %s" % (i, j, page_num)) print("# Amount: %s" % len(answer['results'])) print("# Total: %s" % total) page_num += 1 if page_num > max_page: # 到達最大頁時推出循環到下一個單元 break for k in range(len(answer['results'])): try: province = answer['results'][k]['province'] # 省份 if province != "北京市": break city = answer['results'][k]['city'] # 城市 area = answer['results'][k]['area'] # 區域 uid = answer['results'][k]['uid'] # 唯一標識 community = answer['results'][k]['name'] # 小區名稱 try: street_id = answer['results'][k]['street_id'] # 街道ID except KeyError: street_id = "" address = answer['results'][k]['address'] # 地址 lat = answer['results'][k]['location']['lat'] # 緯度 lng = answer['results'][k]['location']['lng'] # 經度 try: detail = answer['results'][k]['detail_info']['tag'] # 小區類型 except KeyError: detail = "" community_data = [province, city, area, uid,community, address,street_id,lat, lng, detail] # 組成一條記錄 community_data_list.append(community_data) print(community_data) except KeyError: pass else: print("* The rectangle (%d,%d) contains no community"%(i, j)) break return community_data_list data_tmp = get_community()data = pd.DataFrame(data_tmp)data.columns = ['省份','城市','區域','唯一標識','小區名稱','地址','緯度','經度','小區類型']后續將介紹如何獲取該小區的邊界及小區面積計算。
總結
以上是生活随笔為你收集整理的怎么获取web开发怎么获取手机的唯一标识_PYTHON实现北京住宅小区数据抓取-(Web服务API-地点检索服务)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: selenium自动化测试框架_sele
- 下一篇: java api接口报500_应用程序编