爬取高德地图中地铁站点数据

使用python爬取高德地图地铁站点数据,保存成excel或shp文件。

欢迎关注本人公众号--交通数据探索师

首先通过高德地图 | 地铁图进入高德地图地铁页面(本文使用谷歌浏览器),如下,

右键单击页面,点击'检查',再重新加载,如下,

下图框中的两个json文件是我们需要用到的,

其中,citylist.json包含了所有高德有地铁站点数据的城市的中文名、拼音及城市编号等。

3100_drw_shanghai.json包含各站点的具体数据,包括站点名称、所属线路名称、是否换乘站等。如下,这也是我们要爬取的url,但是我们注意到构建该url时,3100是要查询的该城市的编号,shanghai是查询的该城市的拼音,要获取这两个参数,就要用到我们上面提到的citylist.json。

话不多说,直接上代码。

import requests import geopandas as gpd import pandas as pd def get_railway_stop(city_name, save_file=''): """数据来源于高德地图: https://ditu.amap.com/ :param city_name: 要爬取的地铁城市名 要正确输入 :param save_file: 是否保存为excel文件 1表示存成excel 2表示存成shp 其他值表示不存文件 demo: traffic.get_railway_stop(city_name='上海市', save_file=1)""" # 获取可以爬取地铁信息的城市列表 citylist = requests.get(url='https://map.amap.com/service/subway?_1707184339116&srhdata=citylist.json').json() spell = '' # 地铁城市拼音 adcode = '' # 地铁城市编号 for city in citylist['citylist']: if city['cityname'] == city_name: spell = city['spell'] # 获取该城市的拼音 adcode = city['adcode'] # 获取该城市的编号 break if spell == '': print('城市名输入错误') else: city_url = f'https://map.amap.com/service/subway?_1707184339123&srhdata={adcode}_drw_{spell}.json' target_city = requests.get(url=city_url).json() # 文件名 比如上海,那target_city['s']='上海市地铁' filename = target_city['s'] result = {'name': [], # 地铁站名 'line': [], # 地铁线路名 部分线路会包含起点终点站名 如地铁5号线莘庄--闵行开发区 'line_': [], # 地铁线路名 只有地铁线路名 比如 地铁5号线 'color': [], # 地铁线路颜色 'lon': [], # 经度 'lat': [], # 纬度 'transfer': []} # 是否换乘站 1: 是 for line in range(len(target_city['l'])): for stop in range(len(target_city['l'][line]['st'])): result['name'].append(target_city['l'][line]['st'][stop]['n']) result['line'].append(target_city['l'][line]['kn'] + target_city['l'][line]['la']) result['line_'].append(target_city['l'][line]['kn']) result['color'].append(target_city['l'][line]['cl']) lon_lat = target_city['l'][line]['st'][stop]['sl'].split(',') result['lon'].append(lon_lat[0]) result['lat'].append(lon_lat[1]) result['transfer'].append(target_city['l'][line]['st'][stop]['t']) data = pd.DataFrame(result) data[['lon', 'lat']] = data[['lon', 'lat']].apply(pd.to_numeric) if save_file == 1: # 存成excel data.to_excel((f'{filename}.xlsx'), index=False) elif save_file == 2: # 存成shp data = gpd.GeoDataFrame(data, geometry=gpd.points_from_xy(data['lon'], data['lat']), crs='EPSG:4326') data.to_file((f'{filename}.shp'), driver='ESRI Shapefile', encoding='utf-8') return data get_railway_stop(city_name='上海市', save_file=1)

生成的excel内容如下,

生成的shp文件如下,

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

煮雨小筑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值