HTML应用指南:利用GET请求获取全国特斯拉充电桩位置

embedded/2025/1/20 17:47:22/
htmledit_views">

随着电动汽车的普及,充电基础设施的建设变得至关重要。作为电动汽车领域的先驱,特斯拉不仅在车辆技术创新上持续领先,还积极构建广泛的充电网络,以支持其不断增长的用户群体。为了提升用户体验和服务质量,开发人员和数据分析师经常需要访问特斯拉充电桩的位置信息,并将其集成到导航系统、移动应用或网站中。

本篇文章,我们将探究GET请求的实际应用,我们使用Python的requests库通过GET请求,从特斯拉官方API获取充电桩位置信息,深入讲解如何构造请求、解析响应数据以及实现数据可视化,通过可视化分析来实现特斯拉在我国的分布情况。

特斯拉官方网址:https://www.tesla.cn/

接下来就是数据获取部分,先讲一下方法思路,一共三个步骤;

方法思路

  1. 获取所有location_id 列表,另存为csv;
  2. 根据每个location_id 查询相关标签数据;
  3. 坐标转换,BD09转WGS84;

第一步:我们先找到对应数据存储位置,获取所有location_id 列表,另存为csv;

完整代码#运行环境 Python 3.11

import requests
import pandas as pd
from requests.adapters import HTTPAdapter, Retry# 设置请求参数和URL
url = "https://www.tesla.cn/cua-api/tesla-locations"
params = {"translate": "zh_CN","map": "baidu","usetrt": "true"
}# 设置完整的请求头headers = {"Cookie": "YOUR_COOKIE_HERE",  # 替换为您的Cookie"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"}# 创建会话并配置重试策略
session = requests.Session()
retries = Retry(total=5, backoff_factor=1, status_forcelist=[500, 502, 503, 504])
adapter = HTTPAdapter(max_retries=retries)
session.mount('https://', adapter)try:# 发送GET请求response = session.get(url, params=params, headers=headers, timeout=10)# 检查请求是否成功if response.status_code == 200:# 解析JSON响应data = response.json()# 检查响应是否为列表if isinstance(data, list):# 提取所有location_idlocation_ids = [item.get('location_id') for item in data if 'location_id' in item]# 创建DataFramedf = pd.DataFrame(location_ids, columns=['location_id'])# 保存为CSV文件csv_filename = 'tesla_locations.csv'df.to_csv(csv_filename, index=False, encoding='utf-8-sig')print(f"已成功保存 {len(location_ids)} 个location_id到文件: {csv_filename}")else:print("API响应不是预期的列表格式")print(f"响应内容: {response.text}")else:print(f"请求失败,状态码: {response.status_code}, 响应内容: {response.text}")except requests.exceptions.RequestException as e:print(f"请求过程中发生错误: {e}")

我们就会到一个全国所有特斯拉旗下的,包括体验店和展厅、超级充电站、服务中心、目的地充电、钣喷中心的位置坐标的表格tesla_locations.csv;

第二步:我们发现点击一个任意图标,就会生成新的一个链接,在链接中我们就可以获得对应标签数据,来看一下链接的规律,不同点就是location_id的不同值,我们通过遍历所有的location_id,就可以获得所有的标签数据,;

完整代码#运行环境 Python 3.11

import requests
import pandas as pd
import json
from datetime import datetime
import time
import random
import mathdef bd09_to_wgs84(bd_lon, bd_lat):"""百度坐标系(BD-09)转WGS84坐标系"""x_pi = 3.14159265358979324 * 3000.0 / 180.0x = float(bd_lon) - 0.0065y = float(bd_lat) - 0.006z = math.sqrt(x * x + y * y) - 0.00002 * math.sin(y * x_pi)theta = math.atan2(y, x) - 0.000003 * math.cos(x * x_pi)wgs_lon = z * math.cos(theta)wgs_lat = z * math.sin(theta)return wgs_lon, wgs_lat# 读取已有的 CSV 文件
df = pd.read_csv('D:\\data\\tesla_locations.csv')
locations_list = []# 设置请求头headers = {"Cookie": "YOUR_COOKIE_HERE",  # 替换为您的Cookie"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"}# 遍历CSV中的每个location_id
for index, row in df.iterrows():location_id = row['location_id']# 构建请求的 URLurl = f"https://www.tesla.cn/cua-api/tesla-location?id={location_id}&map=baidu"# 随机延时 1-3 秒delay = random.uniform(1, 3)print(f"等待 {delay:.2f} 秒...")time.sleep(delay)# 发送 GET 请求try:response = requests.get(url, headers=headers)print(f"正在处理第 {index + 1}/{len(df)} 个位置,ID: {location_id}")if response.status_code == 200:try:data = response.json()# 获取百度坐标bd_lon = data.get("longitude")bd_lat = data.get("latitude")# 转换为WGS84坐标if bd_lon and bd_lat:wgs84_lon, wgs84_lat = bd09_to_wgs84(bd_lon, bd_lat)else:wgs84_lon, wgs84_lat = None, Nonelocation_info = {"location_id": data.get("location_id"),"title": data.get("title"),"address": data.get("address"),"city": data.get("city"),"province_state": data.get("province_state"),"country": data.get("country"),"bd_longitude": bd_lon,  # 百度坐标"bd_latitude": bd_lat,  # 百度坐标"wgs84_longitude": wgs84_lon,  # WGS84坐标"wgs84_latitude": wgs84_lat,  # WGS84坐标"postal_code": data.get("postal_code"),"directions_link": data.get("directions_link"),"location_type": data.get("location_type", []),"functions_names": data.get("functions_names", [])}locations_list.append(location_info)print(f"成功获取: {location_info['title']}")except json.JSONDecodeError:print(f"ID {location_id} 的响应内容不是有效的JSON格式")else:print(f"请求ID {location_id} 失败,状态码: {response.status_code}")except Exception as e:print(f"处理ID {location_id} 时发生错误: {str(e)}")# 保存结果
try:current_time = datetime.now().strftime('%Y%m%d_%H%M%S')filename = f'tesla_locations_detail_{current_time}.csv'df_result = pd.DataFrame(locations_list)df_result.to_csv(filename, index=False, encoding='utf-8-sig')print(f"\n成功保存 {len(locations_list)} 条数据到 {filename}")
except Exception as e:print(f"保存文件时发生错误: {str(e)}")

到这里数据就下载完成了,我们就得到了一个完整的包括特斯拉充电桩位置及其其他标签的csv;

第三步:坐标系转换,因为数据用的是百度坐标系(BD09),我们需要把转换成wgs84坐标系在argis上展示才不会偏移,我们把csv的坐标列手动分列一下,并把坐标从百度坐标系(BD09)转到WGS84,批量转换工具:地图坐标系批量转换 - 免费在线工具 (latlongconverter.online),这里在讲一个热知识,目前国内主要有以下三种坐标:

WGS84:一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系;

GCJ02:又称火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系;

BD09:百度地图所使用的坐标体系,是在火星坐标系的基础上又进行了一次加密处理;

文章仅用于分享个人学习成果与个人存档之用,分享知识,如有侵权,请联系作者进行删除。所有信息均基于作者的个人理解和经验,不代表任何官方立场或权威解读。


http://www.ppmy.cn/embedded/155540.html

相关文章

Qt之QDjango-db的简单使用

QDjango是一款由C编写、依托于Qt库的Web开发框架,其设计理念受到了广受欢迎的Python框架Django的影响。这个项目旨在提供一个高效、灵活且易于使用的工具集,帮助开发者构建高质量的Web应用。其项目地址: https://gitcode.com/gh_mirrors/qd/qdjango&…

Java——队列(Queue)

1.概念 只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out)的功能。 入队列:进行插入操作的一端称为 队尾( Tail/Rear ) 出队列:进行删除操作…

Nginx正向代理配置

Nginx 正向代理默认只支持 http 协议,不支持 https 协议,需借助 "ngx_http_proxy_connect_module" 模块实现 https 正向代理,详情请参考: https://github.com/chobits/ngx_http_proxy_connect_module 安装Nginx某些模块…

算法刷题笔记——图论篇

这里写目录标题 理论基础图的基本概念图的种类度 连通性连通图强连通图连通分量强连通分量 图的构造邻接矩阵邻接表 图的遍历方式 深度优先搜索理论基础dfs 与 bfs 区别dfs 搜索过程深搜三部曲所有可达路径广度优先搜索理论基础广搜的使用场景广搜的过程 岛屿数量孤岛的总面积沉…

【C语言系列】深入理解指针(1)

前言 总所周知,C语言中指针部分是非常重要的,这一件我们会介绍指针相关的内容,当然后续我还会出大概4篇与指针相关的文章,来深入的讲解C语言指针部分,希望能够帮助到指针部分薄弱或者根本不会的程序员们,后…

IO多路复用详解-selectpollepoll

目录 1.IO多路复用概念 2.系统调用函数 2.1select 2.1.1select函数细节 2.2基于select实现并发处理 2.2.1处理流程 2.2.2服务端通信代码 2.2.3客户端通信代码 2.3基于poll函数实现并发处理 2.3.1select与poll函数区别 2.3.2poll函数 2.3.3服务器端代码实现 2.3.4客…

【论文投稿】探秘计算机视觉算法:开启智能视觉新时代

目录 引言 一、计算机视觉算法基石:图像基础与预处理 二、特征提取:视觉信息的精华萃取 三、目标检测:从图像中精准定位目标 四、图像分类:识别图像所属类别 五、语义分割:理解图像的像素级语义 六、计算机视觉…

nginx常用配置 (含负载均衡、反向代理、限流、Gzip压缩、图片防盗链 等示例)

nginx的配置文件通常在 /etc/nginx/nginx.conf , /etc/nginx/conf.d/*.conf 中, 一般直接 改 conf.d目录下的 default.conf文件, 然后 先检测配置文件是否有错误 nginx -t 再重新加载配置文件 或 重启nginx,命令如下 nginx -s reload 或…