这里我参考了知乎一个文章点击查看原文
首先我们在百度地图开发者平台创建一个用户,申请一个应用,值得注意的是要把ip写成0.0.0.0/0
import requests
import json
from openpyxl import load_workbook # 用于读取xlsx格式文件
import csv
def gain_location(adress):
#这个api_url网址里的city=填你想填的城市名(非必需参数,即可删除city=xxx),ak=填入你自己的密匙,output=json意思是输出json格式
api_url = f'http://api.map.baidu.com/geocoding/v3/?city=西安市&address={adress}&ak=AQyA0VUGmTDDGWTNOR49KlasK78uH9Ev&output=json&callback=showLocation'
r = requests.get(api_url)
r = r.text
'''经历以下两次去除,使得最终结果为json格式的数据
原来的数据格式:showLocation&&showLocation(' showLocation&&showLocation('showLocation&&showLocation({"status":0,"result":{"location":{"lng":108.94646555063274,"lat":34.34726881662395},"precise":0,"confidence":12,"comprehension":63,"level":"城市"}})
去除后的数据格式为将json字符串转换为字典类型:showLocation&&showLocation({"status":0,"result":{"location":{"lng":108.94646555063274,"lat":34.34726881662395},"precise":0,"confidence":12,"comprehension":63,"level":"城市"}}
'''
r = r.strip('showLocation&&showLocation(')
r = r.strip(')')
jsonData = json.loads(r) # 将json字符串转换为字典类型转为字典格式类型
return jsonData
#××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
"""file = open(r'E:\\爬虫数据分析\调用百度地图api\point.json','w') #建立json数据文件
with open(r'E:\\爬虫数据分析\调用百度地图api\各区域房价.csv', 'r') as csvfile: #打开csv
reader = csv.reader(csvfile)
for line in reader: #读取csv里的数据
# 忽略第一行
if reader.line_num == 1: #由于第一行为变量名称,故忽略掉
continue
# line是个list,取得所有需要的值
b = line[0].strip() #将第一列city读取出来并清除不需要字符
c= line[1].strip()#将第二列price读取出来并清除不需要字符
lng = getlnglat(b)['result']['location']['lng'] #采用构造的函数来获取经度
lat = getlnglat(b)['result']['location']['lat'] #获取纬度
str_temp = '{"lat":' + str(lat) + ',"lng":' + str(lng) + ',"count":' + str(c) +'},'
#print(str_temp) #也可以通过打印出来,把数据copy到百度热力地图api的相应位置上
file.write(str_temp) #写入文档
file.close() #保存"""
#$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
file = open(r'C:\Users\Administrator\Desktop\my\论文\实验数据\point.json','w') #建立json数据文件
filename = r'C:\Users\Administrator\Desktop\my\论文\实验数据\地址.csv'
with open(filename) as f: #将filename当作f来打开
reader = csv.reader(f) #创建一个reader对象将csv读进去
header_row = next(reader) #head_row等于next(reader),next读取reader的第一行
for row in reader: #每次读取一行,每下一个循环读取下一行
b = row[0]
#try:
lng = gain_location(b)['result']['location']['lng'] #采用构造的函数来获取经度
lat = gain_location(b)['result']['location']['lat'] #获取纬度
str_temp = '{"lat":' + str(lat) + ',"lng":' + str(lng) + ',"count":5' +'},'
print(str_temp) #也可以通过打印出来,把数据copy到百度热力地图api的相应位置上
#except:
#print(row[0])
需要注意的是,try/except这个很重要,在我的代码运行到地址的第七行的时候就报错了,因为我之前的地址转换为经纬度已经打印出来了,所以程序是没有问题的,这样问题只剩下是我的地址有问题了,但是问题总是一小部分,我们只需要忽略掉就好了。将我的注释符去掉即可
for row in reader: #每次读取一行,每下一个循环读取下一行
b = row[0]
try:
lng = gain_location(b)['result']['location']['lng'] #采用构造的函数来获取经度
lat = gain_location(b)['result']['location']['lat'] #获取纬度
str_temp = '{"lat":' + str(lat) + ',"lng":' + str(lng) + ',"count":5' +'},'
print(str_temp) #也可以通过打印出来,把数据copy到百度热力地图api的相应位置上
except:
print(row[0])
结果生成出来之后,我们可以手动复制,亦可以写入文件,我图方便直接手动复制了
这里需要注意的是我的格式,这样是为了符合百度地图的格式
我们将实例代码复制下来,并将我们自己生成的经纬度将实例代码替换,保存成html格式,用浏览器打开即可,上图中间的代码可以设置百度地图打开之后的中心位置。
这里我使用的是之前文章里面用到的美团商户的数据,这里有一个问题,现在没时间解决。留在这里
我在打开一个csv文件之后,报错了,我猜测可能是因为每个数据太长了,于是我就直接在vscode中打开了这个文件,将它全部删掉只剩下一个短短的“武汉火车站”,然后就出现编码错误了,于是我就把这个文件删掉了,为了重新试验所以我要找到原始的文件,我想到vscode可以直接在文件列表中找,于是我就复制了一份,这个时候vscode自动把源文件打开了,问题出来了,我再用excel打开这个文件的时候,里面全部变成了乱码,并且在vscode中打开文件,就算是没有修改,在我要在vscode中关闭它的时候会提示我要不要保存修改,综上我猜测vscode在打开csv文件的时候自动修改的编码。