百度地图收藏地址高效迁移工具:从HTML到JSON的自动化转换

news2026/3/16 14:33:09
1. 为什么需要百度地图收藏地址迁移工具作为一个经常使用地图软件的老用户我深知收藏地址的重要性。无论是常去的餐厅、客户公司位置还是朋友家的地址我们都会习惯性地在地图上收藏起来。但最近遇到一个头疼的问题由于工作需要我不得不从百度地图切换到其他地图平台结果发现几百个收藏地址根本无法批量迁移。这个问题其实很普遍。很多用户会因为各种原因需要更换地图平台比如公司要求统一使用某个地图服务某些地图平台在特定区域有更好的数据覆盖个人偏好改变想尝试新的地图应用手动一个个重新收藏不仅耗时耗力还容易出错。我试过手动迁移50个地址花了整整一上午眼睛都快看花了。这就是为什么我们需要一个自动化工具来解决这个问题。百度地图确实提供了收藏夹导出功能但导出的HTML文件并不能直接被其他地图平台识别。这时候就需要一个格式转换工具把HTML中的地址信息提取出来转换成通用的JSON格式。JSON作为一种轻量级的数据交换格式几乎被所有现代应用支持是数据迁移的理想选择。2. 工具准备与环境配置这个迁移工具完全基于Python开发最大的优点是不需要安装任何第三方库Python自带的几个标准库就够用了。这意味着即使你是Python新手也能轻松上手。2.1 检查Python环境首先确认你的电脑上安装了Python 3.6或更高版本。打开命令行Windows上是cmd或PowerShellMac/Linux上是Terminal输入python --version如果显示版本号低于3.6需要先去Python官网下载最新版本安装。我建议直接安装Python 3.8或更高版本兼容性更好。2.2 准备百度地图收藏文件登录百度地图网页版进入我的收藏。找到分享或导出按钮不同版本界面可能略有不同选择导出为HTML文件。建议命名为baidu_favorites.html这样容易识别的名字。这里有个小技巧如果你的收藏很多导出可能需要一点时间。我遇到过收藏超过500条时导出过程会卡住。这时候可以尝试分批导出比如按分类导出。3. 核心代码解析与使用整个工具的核心其实就三个函数加起来不到100行代码。但别看代码少功能可一点不含糊。3.1 数据提取函数详解extract_addresses_from_html函数负责从HTML中提取地址信息。它使用正则表达式来匹配特定的HTML标签模式。这里的关键是理解百度地图导出的HTML结构def extract_addresses_from_html(file_path): with open(file_path, r, encodingutf-8) as f: content f.read() item_pattern rli classitem.*?p classname(.*?)/p.*?p classaddress(.*?)/p.*?/li items re.findall(item_pattern, content, re.DOTALL) locations [] for name, address in items: name unquote(name).replace(quot;, ) address unquote(address).replace(quot;, ) if address ! 地图上的点: locations.append({ name: name, address: address }) return locations这个函数做了几件重要的事情读取HTML文件内容使用正则表达式匹配地址条目对提取的文本进行清洗解码URL编码、处理特殊字符过滤掉无效的地图上的点数据实测下来这个正则表达式能完美匹配当前版本的百度地图HTML结构。但如果百度地图更新了界面设计可能需要相应调整正则表达式。3.2 数据转换函数convert_to_gaode_format函数负责将提取的数据转换为目标格式。虽然函数名是针对高德地图的但实际上输出的是通用JSON格式可以适配大多数地图平台。def convert_to_gaode_format(locations): gaode_locations [] for loc in locations: gaode_locations.append({ name: loc[name], address: loc[address], gaode_formatted_address: loc[address], # 可以在这里添加其他地图平台需要的字段 }) return gaode_locations这个函数的巧妙之处在于它的可扩展性。如果你需要迁移到其他地图平台只需要在输出的JSON中添加相应的字段即可。比如有些平台可能需要经纬度信息就可以在这里预留位置。3.3 数据保存函数save_to_json函数将处理好的数据保存为JSON文件def save_to_json(data, filename): with open(filename, w, encodingutf-8) as f: json.dump(data, f, ensure_asciiFalse, indent2)这里有两个关键参数ensure_asciiFalse保证中文字符正常显示而不是被转换成Unicode编码indent2让输出的JSON文件有良好的缩进格式方便人工阅读和检查4. 完整使用流程与实战技巧现在让我们把各个部分组合起来看看完整的迁移流程是怎样的。4.1 准备阶段将导出的百度地图收藏HTML文件放在一个专门的文件夹创建一个新的Python脚本文件比如map_migrate.py把前面提到的三个函数复制到脚本中添加主程序部分if __name__ __main__: # 提取地址 locations extract_addresses_from_html(baidu_favorites.html) # 转换格式 gaode_locations convert_to_gaode_format(locations) # 保存结果 save_to_json(gaode_locations, converted_addresses.json) # 打印摘要信息 print(f成功转换 {len(gaode_locations)} 个地址) print(前5条记录示例) for loc in gaode_locations[:5]: print(f- {loc[name]}: {loc[address]}) if len(gaode_locations) 5: print(...)4.2 运行脚本在命令行中导航到脚本所在目录然后运行python map_migrate.py正常情况下你会看到类似这样的输出成功转换 127 个地址 前5条记录示例 - 公司总部: 北京市海淀区上地十街10号 - 常去的咖啡厅: 上海市静安区南京西路1376号 - 客户A办公室: 广州市天河区珠江新城华夏路8号 - 机场停车场: 深圳市宝安区福永街道 - 朋友家: 成都市武侯区人民南路四段 ...同时目录下会生成一个converted_addresses.json文件里面包含了所有转换后的地址信息。4.3 导入到其他地图平台生成的JSON文件可以用于多种用途手动查看和复制地址使用目标地图平台的API批量导入进一步处理成其他格式如CSV如果是导入高德地图可以使用他们的收藏夹API。如果是其他平台通常也会有类似的导入功能。具体操作可以参考各个平台的开发者文档。5. 常见问题排查与解决方案在实际使用过程中可能会遇到一些问题。下面是我在开发和测试过程中遇到的一些典型问题及解决方法。5.1 正则表达式匹配失败如果运行脚本后发现提取的地址数量为0很可能是正则表达式不匹配当前的HTML结构。解决方法打开导出的HTML文件查看收藏项的HTML结构确认li和p标签的class名称是否变化根据需要调整正则表达式中的模式比如如果class名称变成了fav-item就需要修改正则表达式item_pattern rli classfav-item.*?p classtitle(.*?)/p.*?p classdesc(.*?)/p.*?/li5.2 中文乱码问题虽然脚本中已经设置了UTF-8编码但有时打开JSON文件仍可能看到乱码。这通常是因为使用的文本编辑器没有以UTF-8编码打开文件HTML文件本身不是UTF-8编码解决方法确保用支持UTF-8的编辑器如VS Code、Notepad打开JSON文件如果HTML文件是GBK编码修改extract_addresses_from_html函数中的编码参数with open(file_path, r, encodinggbk) as f:5.3 文件路径问题如果提示文件不存在检查以下几点HTML文件是否和脚本在同一目录文件名是否完全匹配包括扩展名如果文件在其他目录需要使用绝对路径如locations extract_addresses_from_html(C:/Users/YourName/Documents/baidu_favorites.html)在Windows系统中路径中的反斜杠需要转义或使用原始字符串locations extract_addresses_from_html(rC:\Users\YourName\Documents\baidu_favorites.html)6. 进阶应用与扩展思路基础功能实现后我们可以考虑一些进阶功能和扩展方向让这个工具更加强大。6.1 自动获取经纬度信息很多地图应用需要经纬度坐标而不仅仅是文字地址。我们可以集成地图API来自动获取这些信息。以高德地图API为例import requests def get_gaode_coordinates(address, api_key): url fhttps://restapi.amap.com/v3/geocode/geo?address{address}key{api_key} response requests.get(url) data response.json() if data[status] 1 and len(data[geocodes]) 0: lng, lat data[geocodes][0][location].split(,) return lat, lng return None, None然后在转换函数中调用def convert_to_gaode_format(locations, api_keyNone): gaode_locations [] for loc in locations: new_loc { name: loc[name], address: loc[address], gaode_formatted_address: loc[address] } if api_key: lat, lng get_gaode_coordinates(loc[address], api_key) if lat and lng: new_loc[lat] lat new_loc[lng] lng gaode_locations.append(new_loc) return gaode_locations6.2 支持其他地图平台同样的思路可以应用于其他地图平台。比如要支持腾讯地图只需要添加相应的格式转换函数def convert_to_tencent_format(locations): tencent_locations [] for loc in locations: tencent_locations.append({ title: loc[name], address: loc[address], coordinates: { latitude: , # 可以留空或通过API获取 longitude: } }) return tencent_locations6.3 批量导入功能有了JSON数据后我们可以进一步实现自动导入功能。以高德地图为例def import_to_gaode(locations, api_key): url https://restapi.amap.com/v3/favorite/add for loc in locations: params { key: api_key, name: loc[name], address: loc[address], lat: loc.get(lat, ), lng: loc.get(lng, ) } response requests.post(url, paramsparams) print(f导入 {loc[name]}: {response.json()[message]})这样就能实现从百度地图导出到其他地图平台导入的完整自动化流程。7. 实际应用中的经验分享在多次使用和优化这个工具的过程中我积累了一些实用经验分享给大家可能会有所帮助。7.1 处理大量数据的技巧当收藏地址数量很大时比如超过1000条可能会遇到性能问题。这时可以考虑分批处理将大的HTML文件拆分成多个小文件处理增加进度显示在处理过程中打印进度方便了解运行状态错误重试机制对于API调用失败的项目自动重试def batch_process(input_file, batch_size100): all_locations [] with open(input_file, r, encodingutf-8) as f: content f.read() items re.findall(item_pattern, content, re.DOTALL) for i in range(0, len(items), batch_size): batch items[i:ibatch_size] print(f处理批次 {i//batch_size 1} (共 {len(batch)} 条)) locations [] for name, address in batch: # 处理逻辑... locations.append(...) all_locations.extend(locations) return all_locations7.2 数据质量控制迁移过程中数据质量很重要。可以添加一些自动检查地址有效性验证检查地址是否包含关键信息如城市名、街道名去重处理避免重复导入相同的地址分类整理根据地址特征自动分类如住宅、商业、交通等def validate_address(address): # 简单检查地址是否包含城市和街道信息 required_parts [市, 路, 号] return all(part in address for part in required_parts) def clean_data(locations): unique_locations [] seen set() for loc in locations: # 去重 key (loc[name], loc[address]) if key in seen: continue seen.add(key) # 验证 if validate_address(loc[address]): unique_locations.append(loc) else: print(f警告跳过无效地址 {loc[name]} - {loc[address]}) return unique_locations7.3 用户友好性改进为了让工具更易用可以添加一些用户友好的功能命令行参数支持让用户可以通过命令行指定输入输出文件配置文件保存常用设置如API密钥日志记录将运行信息保存到日志文件import argparse def main(): parser argparse.ArgumentParser(description百度地图收藏地址迁移工具) parser.add_argument(-i, --input, help输入HTML文件路径, defaultbaidu_favorites.html) parser.add_argument(-o, --output, help输出JSON文件路径, defaultconverted_addresses.json) parser.add_argument(-k, --key, help高德API密钥可选) args parser.parse_args() locations extract_addresses_from_html(args.input) gaode_locations convert_to_gaode_format(locations, args.key) save_to_json(gaode_locations, args.output) print(f转换完成结果已保存到 {args.output}) if __name__ __main__: main()这样用户就可以通过命令行灵活指定参数了python map_migrate.py -i my_favorites.html -o output.json -k your_api_key

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2416222.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…