1、背景
我需要批量获取某些地点的经纬度信息,用于绘制相应的地理分布图。
一个一个在搜索引擎上查找很麻烦的,于是就希望能够利用Python程序和腾讯地图API批量操作。
方便快捷,而且一劳永逸。
2、步骤
(1)准备
把需要查找的地点名称放在一个Excel表格第一列里。
(2)代码
复制粘贴上去就是你的啦,不过别忘了改一下读取的
表格的路径
和
表格行数
↓↓↓
import requests
import xlrd
import xlwt
def tengxun(addr):
url = "https://apis.map.qq.com/jsapi?" # 腾讯地图API接口
para = {
"qt": "geoc",
"addr": addr, # 传入地址参数
"output": "json",
"key": "D7EBZ-NHYKX-UAH4A-74TW4-6M2JE-UHFLY", # 即腾讯地图API的key
"pf": "jsapi",
"ref": "jsapi"
}
req = requests.get(url, para) # 请求数据
req = req.json() # 转为json格式
# print(req)
m = req["detail"]
g = f"{m['pointx']},{m['pointy']}" # 解析到经纬度数据
print(g.split(","))
return g
newbook=xlwt.Workbook(encoding="utf-8",style_compression=0)
newsheet=newbook.add_sheet("Sheet1",cell_overwrite_ok=True)
################################################
readbook=xlrd.open_workbook("国内.xlsx") ####修改路径
################################################
readsheet=readbook.sheet_by_name("Sheet1")
################################################
for i in range(141): ####################修改表格行数
################################################
name=readsheet.cell(i,0).value
try:
l=tengxun(name).split(",")
newsheet.write(i,0,eval(l[0]))
newsheet.write(i,1,eval(l[1]))
except:
continue
newbook.save("对应经纬度信息.xls")
(3)结果
打开”对应经纬度信息.xls“结果如下图所示:
3、分析
Q:可以看到,上面表格里有很多空行。为什么没有获取到呢?
A:笔者经过测试,发现这种情况应该是地名不够详细导致,例如无法获取”中国药科大学“的经纬度信息,但是”江宁区中国药科大学”可以。
4、修改
(1)修改表格
我们对没有获取到经纬度信息的地名进行信息补充。
补充的信息放在对应行的第二列就好了,就像这样↓↓↓
(2)修改代码
把for循环里的
name=readsheet.cell(i,0).value
改为:
name=readsheet.cell(i,1).value+readsheet.cell(i,0).value
(3)结果
再次运行结果:
比之前好多了,但是还是有少数几个无法获取,可能是提供的信息还不够,不过还是大大减少了工作量。
4、总结
-
对
request
库还不太熟悉,但是使用步骤好像类似。 -
tengxun()
函数忘了是从哪位佬那抄来的,没找到原博客,侵删。
如果这篇博客对你有所帮助,点个赞吧,同时如果有什么问题,欢迎评论留言。
版权声明:本文为U202113837原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。