这不是一个正常的需求,正常情况下通过api调用即可完成,但因某些原因需要将数据记录在excel中因此做了这个玩意
首先需要下载安装需要用到的库,包含xlrd用于excel数据的读取、requests用于返回的网址取数、xlutils.copy用于数据写入
import xlrd
import requests
from xlutils.copy import copy
需要准备一个存储了地址、所在地市的excel并进行数据读取wb = xlrd.open_workbook('高德地图经纬度返回.xls')
# 读取sheet页
ws = wb.sheets()
wsname = wb.sheet_names()
print(wsname)
ws1 = wb.sheet_by_name('Sheet1')
# 找到需修改的工作表
nwb = copy(wb)
nw1 = nwb.get_sheet('Sheet1')
然后获取数据并查询,然后将数据返回写入单元格里
# 获取行列
# 行数
crow1 = ws1.nrows
# 列数
ccol1 = ws1.ncols
i = 1
while i < crow1:
row_data = ws1.row_values(i)
date = {
'address': row_data[1],
'city': row_data[2],
'output': 'XML',
'key': '你在高德api中获得的key'
}
url = 'https://restapi.amap.com/v3/geocode/geo'
postdz = requests.post(url=url, data=date)
page_text = postdz.text
nw1.write(i, 4 , page_text)
i=i 1
print('查询结束')
nwb.save('高德地图经纬度返回.xls')
然后根据返回的数据进行解析,并将经度纬度分别放在右侧的单元格里
y=1
while y<crow1:
row_data = ws1.row_values(y)
row_date = eval(row_data[4])
sfcx=row_date['status']
if sfcx == '1':
b=row_date['count']
jwdsj=row_date['geocodes']
a=1
while a<=eval(b):
jwdsjtqjg_address=jwdsj[a-1]['formatted_address']
jwdsjtqjg_city=jwdsj[a-1]['city']
jwdsjtqjg_district = jwdsj[a-1]['district']
jwdsjtqjg_location = jwdsj[a-1]['location']
nw1.write(y, 5 a * 5, jwdsjtqjg_address)
nw1.write(y, 6 a*5, jwdsjtqjg_city)
nw1.write(y, 4 a*5, jwdsjtqjg_district)
nw1.write(y, 7 a*5, jwdsjtqjg_location)
a=a 1
else:
print('未查询到地址')
y=y 1
nwb.save('高德地图经纬度返回.xls')
[ 本帖最后由 1099168634 于 2024-3-9 02:01(GMT0) 编辑 ]
搜索更多相关主题的帖子:
一代综师