python读取网络路径_python雷达图代码[通俗易懂]

python读取网络路径_python雷达图代码[通俗易懂]初始化每条道路四个方向(we,ew,sn,ns)的速度信息于内存的allRoadInfo字典对象中

在爬取之前,要先申请自己的key,申请的方法可以参见

用python实现获取道路实时信息和速度

初始化每条道路四个方向(we,ew,sn,ns)的速度信息于内存的 allRoadInfo 字典对象中。因为城市道路交通条例的规定,市区普通道路车速限速 60km/h,因此设置每个方向上的车速默认值为 60。将道路名称和各方向速度作为一个字典对象插入到 allRoadInfo 对象中

# 功能:读取定义道路编号的文本,对每条道路进行四个方向的初始化,插入到allRoadInfo的字典中
# 因为城市中的车速为0到60,所以在初始化的时候就设置为60
def initRoadInfo():
    # 读取文件,获取查询的道路的名称
    f = open("./road_name.txt", 'r', encoding="utf-8")
    lines = f.readlines()
    # 遍历文件中的道路的信息,创建一个roadInfo字典并初始化
    i = 1
    for line in lines:
        roadInfo = {'name': line, 'we': 60, 'ew': 60, 'sn': 60, 'ns': 60, 'time': '0'}
        # 创建一个道路信息的字典
        allRoadInfo[i] = roadInfo
        i += 1
    print("初始化道路信息成功!")
    print(allRoadInfo)
    f.close()
初始化道路信息后便可以根据收集到的数据更 新对应的道路信息。首先,通过拼接字符串的方式获得想要查询道路的 URL 地址(这个拼接URL的方法可以参见百度地图服务文档),利用 get()方法返回 response 类型的数据,使用 load()方法把数据转换为 Json 格式,便于后续处理根据返回结果,获取到该道路各个方向上车流平均速度,然后更新allRoadInfo 字典中相应的车速数据。
# 功能:调用百度地图API获取数据,解析数据后数将据流写入文件中
def updateRoadInfo():
    f = open('./实时速度.txt', "a+")
    road_num = 44  # 这个需要根据你们自己的想要获取的道路信息的个数定(就是道路数量)
    for num in range(road_num):  # 遍历所有道路,调用API获取相应的数据
        pre_baidu = "http://api.map.baidu.com/traffic/v1/road?"
        # 拼接字符串形成URL
        address_daidu = "{}road_name={}&city={}&ak={}".format(pre_baidu,
                                                              allRoadInfo[num + 1]["name"].replace("\n", "").replace(
                                                                  "\t", ""), "重庆市", key_baidu)
        # 在爬取数据的同时写入时间信息
        curr_time = datetime.datetime.now()
        time_str = datetime.datetime.strftime(curr_time, '%Y-%m-%d %H:%M:%S')
        allRoadInfo[num + 1]['time'] = time_str

        results = requests.get(address_daidu)  # 发出get请求,返回数据
        data = json.loads(results.text)
        # print(data)
        if data["status"] != 0:  # 判断信息是否获取成功,0表示获取数据成功
            print("\n{}的信息获取失败!".format((allRoadInfo[num + 1]["name"])))  # 若信息获取失败就不做任何的操作
        else:
            print("\n{}的信息获取成功!".format(allRoadInfo[num + 1]["name"]))

            temp1 = data["evaluation"]['status_desc']  # 获取道路描述
            temp2 = data["description"]  # 获取道路描述

            if temp1.find(u"拥堵") != -1 or temp2.find(u"拥堵") != -1:  # 从道路描述中判断道侣是否发生拥堵
                print("该道路正在发生拥堵!")
                print("拥堵详情:%s ,%s" % (temp1, temp2))
                # 因为百度地图返回的信息中,道路拥堵和道路没有拥堵时候,返回的信息不一样,所以这里要分一下
                if "congestion_sections" in data["road_traffic"][0]:  # 如果出现道路拥堵信息则遍历详情信息
                    length = len(data["road_traffic"][0]["congestion_sections"])  # 获取道路拥堵信息长度
                    for i in range(length):
                        speed = data["road_traffic"][0]["congestion_sections"][i]["speed"]
                        direct = getDirection(data["road_traffic"][0]["congestion_sections"][i]["section_desc"])
                        # 获取当前道路信息的方向代码
                        allRoadInfo[num + 1][direct] = speed  # 储存对应道路,对应方向,速度的信息


            else:
                print("该道路双向通畅!")

            # 将道路信息写入文件中

        f.write(("%d  %s  %.2f  %.2f  %.2f  %.2f  %s\n" % (num + 1,
                                                           allRoadInfo[num + 1]["name"].replace('\n', ''),
                                                           allRoadInfo[num + 1]["we"],
                                                           allRoadInfo[num + 1]["ew"],
                                                           allRoadInfo[num + 1]["sn"], allRoadInfo[num + 1]["ns"],
                                                           allRoadInfo[num + 1]['time'])))
        print("该道路个方向速度写入成功!")

    f.close()
    print(allRoadInfo)
    print("\n************结束调用API获取道路信息***************")

在这段代码里面有一个getDirection()的函数,函数的描述如下:

因为API 所获得数据中描述道路信息的字符串为中文,因此需要定义一个函数来返回这条描述所对应的方向代码。

最后主函数

while True:
    initRoadInfo()  # 初始化道路信息
    updateRoadInfo()  # 更新道路信息(将实时速度写入)
    print("成功获取第%d帧信息!" % (time_num))
    time_num += 1
    time.sleep(60)  # 等待gap_time*60秒再次执行

整体代码

# Author:lei吼吼
# -*- coding=utf-8 -*-
# @Time :2022/3/20 15:00
# @File: 实时速度.py
# @Software:PyCharm

import datetime
import time
import requests
import json

curr_time = datetime.datetime.now()
time_str = datetime.datetime.strftime(curr_time, '%Y-%m-%d %H:%M:%S')
key_baidu = "自己的AK"  # 这个就是自己的AK,你们要自己改了
allRoadInfo = {}
time_num = 1


# 功能:读取定义道路编号的文本,对每条道路进行四个方向的初始化,插入到allRoadInfo的字典中
# 因为城市中的车速为0到60,所以在初始化的时候就设置为60
def initRoadInfo():
    # 读取文件,获取查询的道路的名称
    f = open("./road_name.txt", 'r', encoding="utf-8")
    lines = f.readlines()
    # 遍历文件中的道路的信息,创建一个roadInfo字典并初始化
    i = 1
    for line in lines:
        roadInfo = {'name': line, 'we': 60, 'ew': 60, 'sn': 60, 'ns': 60, 'time': '0'}
        # 创建一个道路信息的字典
        allRoadInfo[i] = roadInfo
        i += 1
    print("初始化道路信息成功!")
    print(allRoadInfo)
    f.close()


# 功能:将中文的道路信息的描述转化成英文代码
def getDirection(desc):
    direction = "default"

    # 根据中文的描述进行初始化
    if desc.find(u"西向东") != -1:
        direction = "we"
    if desc.find(u"东向西") != -1:
        direction = "ew"
    if desc.find(u"南向北") != -1:
        direction = "sn"
    if desc.find(u"北向南") != -1:
        direction = 'ns'
    return direction


# 功能:调用百度地图API获取数据,解析数据后数将据流量写入文件中
def updateRoadInfo():
    f = open('./实时速度.txt', "a+")
    road_num = 44  # 这个需要根据你们自己的想要获取的道路信息的个数定(就是道路数量)
    for num in range(road_num):  # 遍历所有道路,调用API获取相应的数据
        pre_baidu = "http://api.map.baidu.com/traffic/v1/road?"
        # 拼接字符串形成URL,这个你们要根据你们自己的具体情况,自己改一下
        address_daidu = "{}road_name={}&city={}&ak={}".format(pre_baidu,
                                                              allRoadInfo[num + 1]["name"].replace("\n", "").replace(
                                                                  "\t", ""), "重庆市", key_baidu)
        # 在爬取数据的同时写入时间信息
        curr_time = datetime.datetime.now()
        time_str = datetime.datetime.strftime(curr_time, '%Y-%m-%d %H:%M:%S')
        allRoadInfo[num + 1]['time'] = time_str

        results = requests.get(address_daidu)  # 发出get请求,返回数据
        data = json.loads(results.text)
        # print(data)
        if data["status"] != 0:  # 判断信息是否获取成功,0表示获取数据成功
            print("\n{}的信息获取失败!".format((allRoadInfo[num + 1]["name"])))  # 若信息获取失败就不做任何的操作
        else:
            print("\n{}的信息获取成功!".format(allRoadInfo[num + 1]["name"]))

            temp1 = data["evaluation"]['status_desc']  # 获取道路描述
            temp2 = data["description"]  # 获取道路描述

            if temp1.find(u"拥堵") != -1 or temp2.find(u"拥堵") != -1:  # 从道路描述中判断道侣是否发生拥堵
                print("该道路正在发生拥堵!")
                print("拥堵详情:%s ,%s" % (temp1, temp2))
                # 因为百度地图返回的信息中,道路拥堵和道路没有拥堵时候,返回的信息不一样,所以这里要分一下
                if "congestion_sections" in data["road_traffic"][0]:  # 如果出现道路拥堵信息则遍历详情信息
                    length = len(data["road_traffic"][0]["congestion_sections"])  # 获取道路拥堵信息长度
                    for i in range(length):
                        speed = data["road_traffic"][0]["congestion_sections"][i]["speed"]
                        direct = getDirection(data["road_traffic"][0]["congestion_sections"][i]["section_desc"])
                        # 获取当前道路信息的方向代码
                        allRoadInfo[num + 1][direct] = speed  # 储存对应道路,对应方向,速度的信息


            else:
                print("该道路双向通畅!")

            # 将道路信息写入文件中

        f.write(("%d  %s  %.2f  %.2f  %.2f  %.2f  %s\n" % (num + 1,
                                                           allRoadInfo[num + 1]["name"].replace('\n', ''),
                                                           allRoadInfo[num + 1]["we"],
                                                           allRoadInfo[num + 1]["ew"],
                                                           allRoadInfo[num + 1]["sn"], allRoadInfo[num + 1]["ns"],
                                                           allRoadInfo[num + 1]['time'])))
        print("该道路个方向速度写入成功!")

    f.close()
    print(allRoadInfo)
    print("\n************结束调用API获取道路信息***************")


while True:
    initRoadInfo()  # 初始化道路信息
    updateRoadInfo()  # 更新道路信息(将实时速度写入)
    print("成功获取第%d帧信息!" % (time_num))
    time_num += 1
    time.sleep(60)  # 等待gap_time*60秒再次执行
最后说明一下我在代码中用到的文档
road_name.txt是道路名字的文本文件(就是你要获取实时速度道路的名字)如下:

python读取网络路径_python雷达图代码[通俗易懂]

 最后得到的实时速度.txt 的样子如下:第一排是道路的名字,第二排是西向东的道路速度,第三排是东向西道路速度,第四排是南向北道路速度,第五排是北向南道路速度,最后一排是爬取数据时的时间

python读取网络路径_python雷达图代码[通俗易懂]

今天的文章python读取网络路径_python雷达图代码[通俗易懂]分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/86234.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注