在地理分析中,通常需要自己获取经纬度数据,当地址只有几个的时候,可以直接在网页输入地址拾取经纬度即可,而当地址数量庞大,比如几十个几百个的时候,肯定是耗费时间的,这时就可以借助python与地图接口来进行经纬度的爬取。
需求:已有目标地址,需要通过地址来获取该地址的经纬度
1.高德地图接口的准备
在编辑代码之前需要先在高德地图中注册账号(已有就可以直接登录),申请密钥,才能正常爬取数据。
https://lbs.amap.com/tools/picker
注册账号登录以后,就可以进入控制台,在界面左侧点击“应用管理–我的应用”
然后点击创建新应用,第一次创建会有教程提示,跟下面一样
应用名称可以自己取,应用类型也可以看自己的需求
然后选择“添加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"创建的xlsx的空表格.xlsx") # 文件格式无要求,有一列目标地址即可 add = pd.read_excel(r"自己已有的地址数据的表格.xls") list_addr = [] list_level = [] lon = [] lat = [] for addr in add["地址列的名称"]: try: www.devze.com 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(",")[1android] formatted_address =javascript result['knIvzWhnngeocodes'][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 android= ["名字", "级别", "经度", "纬度"] data3.to_excel(writer, sheet_name="数据结果", index=None) writer._save() print("保存完毕")
到此这篇关于Python实现批量获取地址的经纬度的文章就介绍到这了,更多相关Python地址经纬度内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论