在实际应用中,我们常常需要获取某些地区的一类节点,如在做地区物流节点分析时,需要获取该地区所有物流节点的地址、经纬度等信息。前面发了一个百度api的,这次换做高德api做相同的事件。需要说明的是,虽然查询的是一样的信息,但是不同平台查询到的数据结果不一样。
import pandas as pd
import requests
import json
# 定义获取信息的函数
def search_logistics_infoes(keywords):
api_key = "********" # 你获取的高德api
endpoint = "https://restapi.amap.com/v3/place/text" # 需要连接的高德api接口
params = {
"keywords": keywords,
"city": "广元市",
"output": "json",
"key": api_key
}
infoes = []
page = 1
while True:
params["page"] = page
response = requests.get(endpoint, params=params)
response_json = json.loads(response.text)
if response_json["status"] == "1":
pois = response_json["pois"]
if len(pois) > 0:
for result in pois:
infoes.append(result)
page += 1
else:
break
else:
break
return infoes
# 解析函数
def infoes_to_locations(infoes):
locations = []
for info in infoes:
location = {
"name": info["name"],
"address": info["address"],
"province": info["pname"],
"city": info["cityname"],
"area": info["adname"],
"lng": info["location"].split(",")[0],
"lat": info["location"].split(",")[1]
}
locations.append(location)
return locations
keywords = []
key1 = ['物流中心', '配送中心', '快递转运点', '仓库', '菜鸟驿站']
keywords.extend(key1)
keywords = list(set(keywords))
# 搜索地理名称中包含物流关键词的地理位置信息
infoes = []
for k in keywords:
info = search_logistics_infoes(k)
infoes.extend(info)
print(infoes[0])
len(infoes)
results = infoes_to_locations(infoes)
print(results[0])
len(results)
df = pd.DataFrame(results)
df = df.astype(str)
print(df)
df = df.drop_duplicates(subset=['name', 'address']).reset_index(drop=True)
print(len(df))
df = df.reindex(columns = ['name','address','province','city','area','lng','lat'])
df.columns = ['名称', '地址', '省份', '城市', '地区', '经度', '纬度']
df.index = df.index + 1
print(df)
df.to_excel('某区域物流节点信息.xlsx')
PS: 之前写的百度api的文,欢迎大家查阅~