数据下载链接:百度云下载链接
由于小论文方向为电动汽车的路径规划,所以需要用到充电站的数据,因此需要从高德地图上爬充电站数据。本文学习自这篇文章。
高德有一个开放平台,点击进入,注册(登录)(有了账号之后返回首页)-控制台-应用管理-我的应用-添加,接下来会出现如下界面:
在服务平台的选项中,选择Web服务,这一步很重要!
选完之后可以在界面中得到你的key
接下来需要知道需要查询城市以及POI分类的代码,进入此界面下载参考文档
在之前所说的参考文章中,我找到了作者用来爬数据的代码
from urllib.parse import quote from urllib import request import json import xlwt # 根据城市名称和分类关键字获取poi数据 def getpois(cityname, keywords): i = 1 poilist = [] while True: # 使用while循环不断分页获取数据 result = getpoi_page(cityname, keywords, i) # print(result) result = json.loads(result) # 将字符串转换为json if result['count'] == '0': break hand(poilist, result) i = i + 1 return poilist # 数据写入excel def write_to_excel(poilist, cityname, classfield): # 一个Workbook对象,这就相当于创建了一个Excel文件 book = xlwt.Workbook(encoding='utf-8', style_compression=0) sheet = book.add_sheet(classfield, cell_overwrite_ok=True) # 第一行(列标题) sheet.write(0, 0, 'id') sheet.write(0, 1, 'name') sheet.write(0, 2, 'location') sheet.write(0, 3, 'pname') sheet.write(0, 4, 'pcode') sheet.write(0, 5, 'cityname') sheet.write(0, 6, 'citycode') sheet.write(0, 7, 'adname') sheet.write(0, 8, 'adcode') sheet.write(0, 9, 'address') sheet.write(0, 10, 'type') sheet.write(0, 11, 'typecode') sheet.write(0, 12, 'gridcode') sheet.write(0, 13, 'entr_location') sheet.write(0, 14, 'timestamp') sheet.write(0, 15, 'tel') sheet.write(0, 16, 'postcode') sheet.write(0, 17, 'tag') sheet.write(1, 18, 'shopid') sheet.write(1, 19, 'shopinfo') for i in range(len(poilist)): # 每一行写入 sheet.write(i + 1, 0, poilist[i]['id']) sheet.write(i + 1, 1, poilist[i]['name']) sheet.write(i + 1, 2, poilist[i]['location']) sheet.write(i + 1, 3, poilist[i]['pname']) sheet.write(i + 1, 4, poilist[i]['pcode']) sheet.write(i + 1, 5, poilist[i]['cityname']) sheet.write(i + 1, 6, poilist[i]['citycode']) sheet.write(i + 1, 7, poilist[i]['adname']) sheet.write(i + 1, 8, poilist[i]['adcode']) sheet.write(i + 1, 9, poilist[i]['address']) sheet.write(i + 1, 10, poilist[i]['type']) sheet.write(i + 1, 11, poilist[i]['typecode']) sheet.write(i + 1, 12, poilist[i]['gridcode']) sheet.write(i + 1, 13, poilist[i]['entr_location']) sheet.write(i + 1, 14, poilist[i]['timestamp']) sheet.write(i + 1, 15, poilist[i]['tel']) sheet.write(i + 1, 16, poilist[i]['postcode']) sheet.write(i + 1, 17, poilist[i]['tag']) sheet.write(i + 1, 18, poilist[i]['shopid']) sheet.write(i + 1, 19, poilist[i]['shopinfo']) # 最后,将以上操作保存到指定的Excel文件中 book.save(r'' + cityname + "_" + classfield + '.xls') # 将返回的poi数据装入集合返回 def hand(poilist, result): # result = json.loads(result) # 将字符串转换为json pois = result['pois'] for i in range(len(pois)): poilist.append(pois[i]) # 单页获取pois def getpoi_page(cityname, keywords, page): req_url = poi_search_url + "?key=" + amap_web_key + '&extensions=all&keywords=' + quote( keywords) + '&city=' + quote(cityname) + '&citylimit=true' + '&offset=25' + '&page=' + str( page) + '&output=json' data = '' with request.urlopen(req_url) as f: data = f.read() data = data.decode('utf-8') return data if __name__ == '__main__': # 获取城市分类数据 amap_web_key = '你的key' # 申请的key city_list = ["北京市"] #可以修改对应的城市名或者代码 poi_list = ['充电站'] #可以修改对应的POI分类名或者代码 poi_search_url = "http://restapi.amap.com/v3/place/text" poi_boundary_url = "https://ditu.amap.com/detail/get/detail" # TODO 需要爬取的POI所属的城市名,以及分类名. (中文名或者代码都可以,代码详见高德地图的POI分类编码表) # TODO POI与城市编码网址 https://lbs.amap.com/api/webservice/download for city in city_list: for poi in poi_list: pois = getpois(city, poi) # 将数据写入excel write_to_excel(pois, city, poi) print('写入成功')
最后,为什么说之前申请的时候选择服务平台很重要呢
因为我最开始申请的时候选择的是web端,然后使用相应的key时运行代码一直出现下面的问题:
重新申请“web服务平台”类型的key就可以解决这个问题啦!
更多GIS教程学习与数据获取,可以关注地理科学生态网
地理科学数据网 www.csdn.store中富含各种地理科学数据,比如道路网数据、NPP净初级生产力数据、土地利用数据(二级分类)、乡镇边界、NDVI数据、地铁站点、气象数据(降雨量、气温、蒸散量、辐射、湿度、日照时数、风速)、径流量数据、30米土地利用二级分类数据、12.5米高精度DEM高程、2020年行政区划、10、30米NDVI数据、30m精度NPP净初级生产力、夜间灯光数据、统计年鉴、道路网、水系、景区医院等poi、三级流域矢量边界、地质灾害分布数据、30m土壤理化性质数据集、30mGDP柵格数据、30m人口柵格数据、30m精度植被类型数据、30m精度连续年份土地利用数据、GPP初级生产力数据、农田作物类型分布数据、自然保护区分布数据、高精度遥感影像数据、1:10万沙漠沙地分布矢量数据、蒸散发数据、降雨量气温蒸发数据、地表径流量、水汽压、土壤侵蚀数据等,有兴趣的去访问下。