Python實現批量獲取地址的經緯度
在地理分析中,通常需要自己獲取經緯度數據,當地址只有幾個的時候,可以直接在網頁輸入地址拾取經緯度即可,而當地址數量龐大,比如幾十個幾百個的時候,肯定是耗費時間的,這時就可以借助python與地圖接口來進行經緯度的爬取。
需求:已有目標地址,需要通過地址來獲取該地址的經緯度
1.高德地圖接口的準備
在編輯代碼之前需要先在高德地圖中注冊賬號(已有就可以直接登錄),申請密鑰,才能正常爬取數據。
https://lbs.amap.com/tools/picker

注冊賬號登錄以后,就可以進入控制臺,在界面左側點擊“應用管理–我的應用”

然后點擊創(chuàng)建新應用,第一次創(chuàng)建會有教程提示,跟下面一樣

應用名稱可以自己取,應用類型也可以看自己的需求

然后選擇“添加key”

在添加key處,名稱隨意,但服務平臺一定要選擇“web服務”

然后提交,就可以獲得密鑰

上圖中框起來的地方就是自己的密鑰,要復制到代碼中
2.注意:地址信息如果比較模糊的話,需要進行處理一下,在地址前加上“某市某縣”,使結果更加準確。
3.代碼
from urllib import request
import requests
import json
import time
from bs4 import BeautifulSoup
import pandas as pd
# 保存路徑
writer = pd.ExcelWriter(r"創(chuàng)建的xlsx的空表格.xlsx")
# 文件格式無要求,有一列目標地址即可
add = pd.read_excel(r"自己已有的地址數據的表格.xls")
list_addr = []
list_level = []
lon = []
lat = []
for addr in add["地址列的名稱"]:
try:
base = 'https://restapi.amap.com/v3/geocode/geo?key=自己的密鑰&address=' + addr
response = requests.get(base)
result = json.loads(response.text)
lon1 = result['geocodes'][0]['location'].split(",")[0]
lat1 = result['geocodes'][0]['location'].split(",")[1]
formatted_address = result['geocodes'][0]['formatted_address']
level = result['geocodes'][0]['level']
lon.append(lon1)
lat.append(lat1)
list_addr.append(formatted_address)
list_level.append(level)
print(formatted_address, lon1, lat1)
time.sleep(0.1)
except:
list_level.append("無地址")
list_addr.append("無地址")
lon.append("無地址")
lat.append("無地址")
continue
# print(list1)
lists = [list_addr, list_level, lon, lat]
data2 = pd.DataFrame(lists)
data3 = data2.T
data3.columns = ["名字", "級別", "經度", "緯度"]
data3.to_excel(writer, sheet_name="數據結果", index=None)
writer._save()
print("保存完畢")
到此這篇關于Python實現批量獲取地址的經緯度的文章就介紹到這了,更多相關Python地址經緯度內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python中的多線程鎖lock=threading.Lock()使用方式
這篇文章主要介紹了python中的多線程鎖lock=threading.Lock()使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06

