利用Python爬虫和高德地图API获取任意两座城市之间的距离
工作中有时会遇到这样一种场景:年末需要统计所有员工该年的航旅出差情况,然后根据他们的飞行距离补贴一定的交通费。例如如下所示情况:
然而,如果我们使用地图APP等工具逐一进行手工查询,在一家规模稍大的公司,成百上千条数据便很容易让人崩溃。
此时,便需要一种能够批量获取多座城市的位置信息以及他们之间的距离信息的方法。
这里分享一种利用Python爬虫和高德地图API批量获取信息并自动导出到CSV格式文件的做法:
代码原文如下:
import requests
from geopy.distance import geodesic
import csv
''' 例如,我希望获得北京、上海、广州、深圳这四座城市, 任意两座城市之间的距离,以及他们相应的经纬度。只要 把这四座城市的名称放到loc这个列表变量里就可以。如 果要获得其他城市之间的距离,修改loc即可。 '''
loc = ["北京","上海","广州","深圳"]
# 利用高德地图API需要提供key,可以在官网上申请
key = '2ff259313e2a44392d570d5534358105'
# 获取某地的经纬度
def getCoordinate(city):
url= 'https://restapi.amap.com/v3/geocode/geo?parameters?key='+str(city)+'&address='+str(city)+'&key='+str(key)
response = requests.get(url)
answer = response.json()
location = str(answer["geocodes"][0]["location"]).split(",")
return location
# 获取两城市之间的距离信息
def calDistance(place1,place2):
coor1 = getCoordinate(place1)
coor2 = getCoordinate(place2)
distance = geodesic(coor1[::-1],coor2[::-1]).km
return distance
# 创建一个CSV文件以存储信息
csv_file = open('城市距离.csv','w',newline='')
csv_writer = csv.writer(csv_file)
csv_writer.writerow(['城市一','城市二',
'城市一经度','城市一纬度',
'城市二经度','城市二纬度',
'距离(公里)'])
for i in loc:
for j in loc[loc.index(i)+1:]:
csv_writer.writerow([i,j,
getCoordinate(i)[0],getCoordinate(i)[1],
getCoordinate(j)[0],getCoordinate(j)[1],
calDistance(i,j)])
csv_file.close()
导出到csv结果如下: