博客内容介绍

借助高德地图API,爬取指定公交线路(国内绝大多数线路,给定城市名和路线名即可)的始发站、终点站、行驶路径(行车轨迹)、站点名称和坐标、行驶距离等与公交车有关的基本信息,并将其保存到Execl表格中!

说明

考虑到个人最近精力有限,不做知识点详细介绍!

但可以告诉大家有哪些关键点:
1、高德开放平台|高德地图API
注册账号->获取Key!
(密钥Key是url中的一个关键参数,具体获取细节见后文补充部分,但我把自己申请的密钥直接放到代码中了,所以不申请问题也行)

2、啥是API?
API(Application Programming Interface,应用程序接口)
有兴趣就去了解一下,知不知道与本课题关系不大

3、啥是URL?
URL(Uniform Resource Locator,统一资源定位符)
同样,有兴趣就去了解一下,与本博客关系不是非常大~

4、了解requests、json库简单应用
同上,还是有兴趣就去了解一下,一点也不知道是啥其实也行,问题不大

可直接运行的Python程序

1、接口URL介绍

参数设置和返回参数内容,具体可参考:路径规划-API文档-开发指南(关于具体参数细节问题有待进一步探究)

url = 'https://restapi.amap.com/v3/bus/linename?s=rsv3&extensions=all&key=a5b7479db5b24fd68cedcf24f482c156&output=json&city={}&offset=1&keywords={}&platform=JS'.format(cityname,line)

2、完整代码
选取内容以青岛110路公交举例,可根据实际需求自己调整

import requests
import json
import pandas as pd
#0、在这里设置城市和线路名!(应确保有这条线路)
cityname='青岛'
line='110路'
url = 'https://restapi.amap.com/v3/bus/linename?s=rsv3&extensions=all&key=a5b7479db5b24fd68cedcf24f482c156&output=json&city={}&offset=1&keywords={}&platform=JS'.format(cityname,line)
#1、获取数据
r = requests.get(url).text
rt = json.loads(r)
#2、读取公交线路部分信息(可参考rt变量中的内容,按需获取)
dt = {}
dt['line_name'] = rt['buslines'][0]['name'] #公交线路名字
dt['start_stop'] = rt['buslines'][0]['start_stop'] #始发站
dt['end_stop'] = rt['buslines'][0]['end_stop'] #终点站
#3、获取沿途站点站名和对应坐标并保存在“公交基本信息”表格中
station_name = []
station_coords = []
for st in rt['buslines'][0]['busstops']:
    station_name.append(st['name'])
    station_coords.append(st['location'])
dt['station_name'] = station_name
dt['station_coords'] = station_coords
dm = pd.DataFrame(dt)
dm['latitude'], dm['longitude'] = dm['station_coords'].str.split(',', 1).str#将坐标拆解为经度和纬度
dm.to_csv('表格1_{}{}公交基本信息.csv'.format(cityname,line),encoding='utf-8-sig') 

#4、获取沿途路径坐标(行驶轨迹)并保存在“公交路线轨迹表格中”
tmp={}
polyline=rt['buslines'][0]['polyline']
tmp['station_coords']=polyline.split(";")
path=pd.DataFrame(tmp)
path['latitude'], path['longitude'] = path['station_coords'].str.split(',', 1).str#将坐标拆解为经度和纬度
path.to_csv('表格2_{}{}公交路线轨迹.csv'.format(cityname,line),encoding='utf-8-sig')

分析

1、运行结果:
(1)两个表格:
在这里插入图片描述
(2)表格1内容:
①第1遍打开:乱码?
原因分析:此时读入表格中参数encoding=‘utf-8’,应修改为encoding=‘utf-8-sig’
在这里插入图片描述
②:改正后内容:
在这里插入图片描述
(3)表格2内容:
说明:station_coords为经纬度,latitude和longitude分别为拆分后的经纬度,目的是根据方便不同使用场合应用,可根据实际情况调整。

在这里插入图片描述
(4)轨迹可视化
将表格1和表格2中坐标结合使用,采用高德地图可视化平台,绘制轨迹图
本部分在后续文章中还会涉及,这里不做详细介绍
在这里插入图片描述
部分绘制细节:
在这里插入图片描述
2、关键爬取数据变量rt分析
(1)打开Spyder中的Variable explorer(变量探测器)
在这里插入图片描述
(2)点击关键变量buslines
在这里插入图片描述
这些变量什么意思?有的可以直接判断出来,有的可以参照刚推荐的链接,就是这个:路径规划-API文档-开发指南,有的或许需要查阅别的文档了~

补充

1、如何获取密钥Key
(1)进入控制台,在左上角找到“我的应用”
在这里插入图片描述
(2)点击右上角“创建新应用”
在这里插入图片描述
(3)填写创建应用相关信息
在这里插入图片描述

(4)选择添加“Key”

在这里插入图片描述
(5)按选择Web端在这里插入图片描述
(6)申请成功,下图红线内容即为Key在这里插入图片描述

参考链接

CSDN博客:公交信息爬取01

知乎文章:城市路网实时路况爬取与ArcGIS可视化

CSDN博客:pd.read_csv()中encoding='utf-8’和’utf-8-sig’的区别

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐