失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python爬虫 + 百度地图api 获取城市的实时路况信息

python爬虫 + 百度地图api 获取城市的实时路况信息

时间:2021-11-09 02:57:49

相关推荐

python爬虫 + 百度地图api 获取城市的实时路况信息

前言:本文写作的初衷是笔者参与了一个道路实况图的制作项目中,本人负责路况数据的抓取,本来是想要用高德地图的api来进行数据的抓取,但是很不巧的是

高德地图的路况查询api服务已经不能用了,于是我只好去找百度地图的api,而csdn上没有一个关于百度地图路况api的详细介绍的,特别是像制作路况图这样的要抓取大量数据的,所以我就只好自己写一篇。

前期准备 首先要找到百度地图api的服务文档,先去百度地图api的官网

因为要抓取大量数据,所以我这边选用的是矩形道路查询的借口

这里是返回示例,也是我认为在写抓取代码中最值得研究的部分

除了这两部分,还有一些要注意的点,首先,每个要使用api的用户需要一个密钥,也就是第二张图里请求参数里的“ak”,这个可以自己去百度地图api里申请。第二每个ak每天只能调用2000次,矩形路况查询的矩形有大小限制,这意味着,我们如果要获取一整个城市的实时路况数据的话,要讲一个城市分成若干个矩形,而这若干个肯定是大于两千个的,所以,要么就用一个ak重复下载,要么就多搞几个ak下载。

那下面就直接上代码了!!!

import pandas as pdimport requestsAkDict = {1: 'ak1',2: 'ak2',3: 'ak3',4: 'ak4',5: 'ak5',6: 'ak6',7: 'ak7',8: 'ak8',9: 'ak9'} #有条件的朋友可以多加点aknum = 0AkNum = 1#由于一个ak只有2000次调用额度,这里加了一个计数器和一个key来在2000次之后换akx = []url = 'https://api./traffic/v1/bound'headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome''/100.0.4896.88 Safari/537.36'}# 设置初始点经纬度baselng = 111.890888587baselat = 27.8512231429# 设置经纬度宽widelng = 0.012widelat = 0.012for i in range(0, 80):startlat = round(baselat + i * widelat, 6)endlat = round(startlat + widelat, 6)for j in range(0, 200): #这里要着重注意(如果一次使用多个ak)!!!i 和 j 的成绩的最大值不能大于或等于你的ak数乘以2000!!!startlng = round(baselng + j * widelng, 6)endlng = round(startlng + widelng, 6)locStr = str(startlat) + "," + str(startlng) + ";" + str(endlat) + "," + str(endlng)num += 1if num % 2000 == 0:AkNum += 1params = {"bounds": locStr,"road_grade": 0,"ak": AkDict[AkNum]}res = requests.get(url=url, params=params, headers=headers, timeout=(3, 7))data = res.json()if data.get('road_traffic') is not None:for k in range(0, len(data.get('road_traffic'))):road_traffic = data.get('road_traffic')evaluation = data.get('evaluation')road_name = road_traffic[k].get('road_name')status = evaluation.get('status')if (data.get('road_traffic')[k]).get("congestion_sections") is not None:congestion_sections = (road_traffic[k]).get('congestion_sections')status = (congestion_sections[0]).get('status')speed = (congestion_sections[0]).get('speed')congestion_distance = (congestion_sections[0]).get('congestion_distance')congestion_trend = (congestion_sections[0]).get('congestion_distance')section_desc = (congestion_sections[0]).get('section_desc')#这里是需要的数据,要哪些就保留那些else:speed = congestion_distance = congestion_trend = section_desc = ''x.append([road_name, status, speed, congestion_distance, congestion_trend, section_desc, startlat, startlng])print(data)df = pd.DataFrame(x)df.to_csv('csc.csv')

感谢您的阅读

如果觉得《python爬虫 + 百度地图api 获取城市的实时路况信息》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。