任务:根据所给公司名称及地址查询其经纬度。
任务细节:
1、给的是word文档,为了方便脚本处理,转移到Excel中。python读取公司名称和地址。(百度很多方法)
2、调用腾讯地图API
地址解析(地址转坐标) ,该文档有详细的调用细节。简单来说就是需要三个东西:开发者key、地址和区域(可以不要)。
开发者key,是调用脚本的一个通行证,可以百度一下如何申请。
地址就是通过文件获取的公司地址,区域是地址所在的大区,例如北京,广州深圳等,区域可以不写。代码如下:
developer_key = "ZIUBZ-EK2WX-7FY4Y-TBVXN-LJRS2-SGB2A" #API控制台KEY管理中的KEY, 申请的开发者key
def address_to_coordinate(address, region=''):
parameters = {'address': address, 'key': developer_key, 'region': region}
base = "http://apis.map.qq.com/ws/geocoder/v1/?" # 地址解析,地址转坐标
response = requests.get(base, parameters)
answer = response.json()
if(answer['status'] == 0): #数据采集成功
data = {
'lng':answer['result']['location']["lng"], # 经度
'lat':answer['result']['location']["lat"] # 纬度
}
else:
data = {'lng':'error', 'lat':'error', 'error':answer['status']}
print(data)
return data, answer['status']
可以看到将上述的三个参数传入,直接按照脚本请求结果,若查询成功则返回字典的answer['status'] == 0,否则自行查阅错误关键字。对传回数据进行解析,获取经纬度存储到data.
3、将结果写入Excel,这个百度很简单
整体代码:
import requests
developer_key = "ZIUBZ-EK2WX-7FY4Y-TBVXN-LJRS2-SGB2A" #API控制台KEY管理中的KEY, 申请的开发者key
# 通过地址获取经纬度
def address_to_coordinate(address, region_test=''):
parameters = {'address': address, 'key': developer_key, 'region': region_test}
base = "http://apis.map.qq.com/ws/geocoder/v1/?" # 地址解析,地址转坐标
response = requests.get(base, parameters)
answer = response.json()
if(answer['status'] == 0): #数据采集成功
data = {
'lng':answer['result']['location']["lng"], # 经度
'lat':answer['result']['location']["lat"] # 纬度
}
else:
data = {'lng':'error', 'lat':'error', 'error':answer['status']}
print(data)
return data, answer['status']
import pandas as pd
from pandas import DataFrame
import time
def readExcel(filename, sheetname):
data = pd.read_excel(filename, sheetname)
# print(data)
# 通过地址获取经纬度,并修改
for index in range(0, len(data)):
# 开发者并发有限制,根据情况来设置
time.sleep(0.2)
# print(data.loc[index])
address = data.loc[index, '公司'] # 切割具体地址
region_x = data.loc[index, '区域'] # 切割具体区域
lng_lat, state = address_to_coordinate(address, region_x)
data.loc[index, '方式'] = 'comepy'
if not state == 0: # 若查询错误,更改为实际地址
address = data.loc[index, '地址'] # 切割具体地址
lng_lat, state = address_to_coordinate(address, region_x)
data.loc[index, '方式'] = 'address'
data.loc[index, '经度'] = lng_lat['lng']
data.loc[index, '纬度'] = lng_lat['lat']
# print(data)
# 保存修改
DataFrame(data).to_excel(filename, sheet_name=sheetname, index=False, header=True)
if __name__ == '__main__':
# address_to_coordinate("江苏省苏州市吴中区长蠡路99号")
filename = '/Users/didi/Documents/xumengwen/map_xy.xlsx'
sheetname = 'Sheet1'
readExcel(filename, sheetname)