网上摸索了两三天,最后还看到提供此类服务的第三方软件,居然要收费,真的是知识创造财富啊。
其实调取地图不难,更普通的网页爬虫差不多,都是用到requests这个函数,区别在于地图平台需要自己去注册账号,然后申请key。
注:地图平台建议使用高德地图,因为每天的搜索条数多一些。
第一步,去高德地图开发平台注册个人账户,然后新建应用,最后会生成一个key
这一步不赘述了,网上有很多大神已经写了,可参考https://zhuanlan.zhihu.com/p/96838566
第二步,python代码(代码是网上大神整理得来的,感谢大神)
import json import math import requests import ProcessTools.tools as tools #大神写的包 import os key = [''] #你自己申请的key #这里修改高德地图搜索范围,最好用行政区划分,这样返回的数据条不会太多,后面方便写成循环语句 area_code = {'罗湖区': 440303, '福田区': 440304, '南山区': 440305, '宝安区': 440306, '龙岗区': 440307, '盐田区': 440308, '龙华区': 440309, '坪山区': 440310, '光明区': 440311} area_road = {'罗湖区': [], '福田区': [], '南山区': [], '宝安区': [], '龙岗区': [], '盐田区': [], '龙华区': [], '坪山区': [], '光明区': []} def get_busstop(area: str, page: int): data = [] # 保存指定区域的公交站点名称 parameters = {'key': key[0], 'types': 150700&150701&150702&150703, #高德POI分类编码表与城市编码表 'city': area_code[area], 'citylimit': 'true', 'offset': 25, 'page': page, 'output': 'JSON'} res = requests.get('https://restapi.amap.com/v3/place/text?parameters', params=parameters) json_dict = json.loads(res.text) poi_list = json_dict['pois'] count = json_dict['count'] # 当前区域公交站点个数 for poi in poi_list: data.append(poi['name']+ '\t' + poi['address'] + '\t' + poi['location'] + '\t' + poi['adname']) return count, data def mymain(): for area in area_code.keys(): print("当前区域:%s 当前页数:1" % area) count, roads_info = get_busstop(area, 1) area_road[area] = roads_info count = float(count) total_pages = int(math.ceil(count / 25.0)) for page in range(2, total_pages + 1): print("当前区域: %s 当前页数: %s" % (area, page)) try: count, roads_info = get_busstop(area, page) area_road[area].extend(roads_info) except: print("未完成") continue for area, roads_info in area_road.items(): print("保存区域%s:" % area) current_path = os.getcwd() tools.saver(roads_info,file_path= current_path+r'\data-output\busstop\{}.txt'.format(area)) print("保存完毕!!!") mymain()
最后,会在路径下保存所有行政区的所有车站信息。
参考视频网址:https://www.bilibili.com/video/BV1na411w7df?from=search&seid=1163701277294648103
欢迎讨论学习!!!