当前位置: 首页 > news >正文

百度地图收藏地址提取与格式转换工具 说明文档

一、工具概述

该工具是一款基于 Python 开发的轻量级脚本,核心功能为从百度地图收藏夹导出的 HTML 文件中提取地址信息,并将其转换为适配高德地图的格式(含后续对接高德 API 的扩展预留),最终以 JSON 文件输出,简化百度地图到高德地图的收藏地址迁移流程,无需手动逐个整理地址。

二、依赖环境

  1. Python 版本:支持 Python 3.6 及以上版本(需兼容urllib.parse.unquoterejson标准库)。
  2. 依赖库:仅使用 Python 内置标准库,无需额外安装第三方库,具体包括:
    • re:用于通过正则表达式匹配 HTML 中的地址数据。
    • urllib.parse.unquote:用于解码 HTML 中 URL 编码的特殊字符(如%20"等)。
    • json:用于将提取并转换后的地址数据保存为 JSON 文件。

三、核心函数说明

1. extract_addresses_from_html(file_path)

功能

从百度地图收藏夹导出的 HTML 文件中,提取收藏地址的 “名称” 和 “地址” 信息,并进行数据清洗。

参数
  • file_path(str):百度地图收藏夹 HTML 文件的路径(如"C:/文档/收藏夹分享.html"),需确保文件编码为 UTF-8。
处理逻辑
  1. 读取 HTML 文件:以 UTF-8 编码打开并读取指定路径的 HTML 文件内容。
  2. 正则匹配数据:使用正则表达式r'<li class="item">.*?<p class="name">(.*?)</p>.*?<p class="address">(.*?)</p>.*?</li>'匹配 HTML 中 “收藏项” 节点,提取<p class="name">标签内的 “地址名称” 和<p class="address">标签内的 “详细地址”。
    • 注:re.DOTALL参数确保正则中的.能匹配换行符,避免因 HTML 节点换行导致匹配失败。
  3. 数据清洗
    • unquote()解码 URL 编码字符(如将%E4%B8%8A%E6%B5%B7解码为 “上海”)。
    • replace('&quot;', '"')将 HTML 转义字符&quot;还原为双引号"
    • 过滤掉地址为 “地图上的点” 的无效数据(此类数据无实际地址信息)。
  4. 返回结果:返回列表,列表中每个元素为字典,格式为[{"name": "地址名称", "address": "详细地址"}, ...]
返回值
  • locations(list):包含有效地址信息的列表,元素为 “名称 - 地址” 字典。

2. convert_to_gaode_format(locations)

功能

将百度地图提取的地址数据,转换为适配高德地图的格式,预留经纬度(lat/lng)扩展位(用于后续对接高德 API)。

参数
  • locations(list):extract_addresses_from_html函数返回的地址列表,格式为[{"name": "...", "address": "..."}, ...]
处理逻辑
  1. 格式转换:遍历输入的地址列表,为每个地址添加gaode_formatted_address字段(暂与address字段值一致,用于后续高德地图格式适配)。
  2. 预留扩展位:在返回的字典中预留lat(纬度)和lng(经度)字段注释,提示后续可通过高德 “地理编码 API” 获取经纬度并补充(需自行申请高德 API 密钥)。
  3. 返回结果:返回适配高德格式的地址列表。
返回值
  • gaode_locations(list):适配高德地图的地址列表,元素格式为[{"name": "地址名称", "address": "详细地址", "gaode_formatted_address": "详细地址"}, ...]

3. save_to_json(data, filename)

功能

将转换后的地址数据保存为 JSON 文件,确保中文正常显示且格式易读。

参数
  • data(list):待保存的地址数据(通常为convert_to_gaode_format返回的gaode_locations列表)。
  • filename(str):输出 JSON 文件的路径和名称(如"gaode_locations.json",默认保存在脚本运行目录)。
处理逻辑
  1. 写入 JSON 文件:以 UTF-8 编码打开文件,使用json.dump将数据写入。
    • ensure_ascii=False:确保中文不被转为 Unicode 编码(如保留 “上海” 而非"\u4e0a\u6d77")。
    • indent=2:以 2 个空格缩进格式化 JSON 文件,提升可读性。
返回值

无返回值,仅生成 JSON 文件。

四、使用流程

1. 准备百度地图 HTML 文件

  1. 打开百度地图官网(map.baidu.com),登录账号后进入 “我的收藏”。
  2. 点击 “分享” 或 “导出” 按钮(不同版本界面可能不同),将收藏夹导出为 HTML 文件,命名为收藏夹分享.html(或自定义名称)。
  3. 将 HTML 文件与 Python 脚本放在同一目录(或记录文件的完整路径)。

2. 运行脚本

  1. 打开 Python 环境(如 PyCharm、VS Code 或命令行),运行脚本。
  2. 脚本自动执行以下步骤:
    • 调用extract_addresses_from_html("收藏夹分享.html")提取地址。
    • 调用convert_to_gaode_format转换为高德格式。
    • 调用save_to_json生成gaode_locations.json文件。
    • 在控制台打印处理结果:显示总处理数量及前 5 条地址示例(超过 5 条时显示 “...”)。

3. 后续操作

  • 打开gaode_locations.json文件,可直接查看或复制地址信息,手动在高德地图中添加收藏。
  • 若需批量导入高德地图,可基于该 JSON 文件对接高德 “地理编码 API” 获取经纬度后,再调用高德 “收藏夹 API” 实现批量添加(需自行申请高德开发者账号及 API 密钥)。

五、常见问题

  1. 正则匹配不到数据?

    • 检查 HTML 文件中收藏项的标签结构是否为<li class="item">包含<p class="name"><p class="address">,若百度地图更新界面导致标签变化,需同步修改正则表达式中的类名或标签名。
    • 确保 HTML 文件编码为 UTF-8,若为其他编码(如 GBK),需在open函数中指定encoding="gbk"
  2. JSON 文件中文显示乱码?

    • 脚本中save_to_json已设置ensure_ascii=False,若仍乱码,检查打开 JSON 文件的工具是否以 UTF-8 编码读取(如记事本需选择 “编码→UTF-8” 打开)。
  3. 提示 “文件不存在”?

    • 确认extract_addresses_from_htmlfile_path参数是否正确,若文件不在脚本目录,需填写完整路径(如"D:/下载/收藏夹分享.html")。

六、扩展建议

  1. 对接高德地理编码 API:在convert_to_gaode_format函数中,添加调用高德 “地理编码 API” 的代码(需传入address字段),获取经纬度后补充到latlng字段,示例代码框架:

    python

    运行

    import requests
    def get_gaode_latlng(address, api_key):url = f"https://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, lngreturn None, None
    
  2. 批量导入高德收藏:获取经纬度后,调用高德 “收藏夹添加 API”,实现地址的自动批量导入,无需手动操作。
import re
from urllib.parse import unquote
import jsondef extract_addresses_from_html(file_path):"""Extract addresses from Baidu favorities HTML file"""with open(file_path, 'r', encoding='utf-8') as f:content = f.read()# Pattern to match items with name and addressitem_pattern = r'<li class="item">.*?<p class="name">(.*?)</p>.*?<p class="address">(.*?)</p>.*?</li>'items = re.findall(item_pattern, content, re.DOTALL)locations = []for name, address in items:# Clean up the textname = unquote(name).replace('&quot;', '"')address = unquote(address).replace('&quot;', '"')# Skip generic "地图上的点" entries as they're not usefulif address != "地图上的点":locations.append({'name': name,'address': address})return locationsdef convert_to_gaode_format(locations):"""Convert locations to Gaode-compatible formatIn a full implementation, this would call Gaode's API to geocode addresses"""# For now, we're just returning the locations as-is# In a real application, you would call Gaode's geocoding API heregaode_locations = []for loc in locations:gaode_locations.append({'name': loc['name'],'address': loc['address'],# In a full implementation, you would add lat/lng from Gaode API'gaode_formatted_address': loc['address']  })return gaode_locationsdef save_to_json(data, filename):"""Save data to JSON file"""with open(filename, 'w', encoding='utf-8') as f:json.dump(data, f, ensure_ascii=False, indent=2)if __name__ == "__main__":# Extract locations from HTML filelocations = extract_addresses_from_html('收藏夹分享.html')# Convert to Gaode formatgaode_locations = convert_to_gaode_format(locations)# Save to JSON filesave_to_json(gaode_locations, 'gaode_locations.json')# Print summaryprint(f"Processed {len(gaode_locations)} locations:")for loc in gaode_locations[:5]:  # Show first 5print(f"- {loc['name']}: {loc['address']}")if len(gaode_locations) > 5:print("...")

http://www.dtcms.com/a/449463.html

相关文章:

  • 操作系统应用开发(二十三)RustDesk ng反向代理—东方仙盟筑基期
  • 河北省建设厅网站查询中心郑州建站系统费用
  • 分布式系统设计模式:从理论到实践
  • 新零售升维体验商业模式创新研究:基于开源AI大模型、AI智能名片与S2B2C商城小程序的融合实践
  • 【Linux】系统部分——线程安全与线程的单例模式
  • 关键词查询爱站网石家庄新闻头条新闻最新今天
  • HarmonyOS 应用开发深度解析:ArkTS 语法精要与现代化状态管理实践
  • wordpress站点图片多大合适做房产网站不备案可以吗
  • 【深入理解计算机网络04】通信基础核心知识全解析:从信号原理到物理层设备
  • 探索大语言模型(LLM):一文读懂通用大模型的定义、特点与分类
  • 江西网站建设价格东莞做网站 动点官网
  • 金融大数据处理与分析
  • 【Linux】基础开发工具---yum / apt
  • 做的好看的网站中国免费最好用建站cms
  • 项目---网络通信组件JsonRpc
  • 【数字孪生】03-交通数字孪生的架构和关键技术(1)
  • 构建AI智能体:五十五、混合式智能投资顾问:融合快速响应与深度推理的自适应架构
  • 网站建设需求填表你认为优酷该网站哪些地方可以做的更好_为什么?
  • 好用的软件下载网站网站恶意点击软件
  • 软考 系统架构设计师系列知识点之杂项集萃(170)
  • 排序算法比较
  • Learning To Rank
  • 建模布线8
  • 第十六章:固本培元,守正出奇——Template Method的模板艺术
  • 网站开发管理学什么3建设营销型网站流程图
  • 【论文阅读】-《SparseFool: a few pixels make a big difference》
  • SLAM中的非线性优化-2D图优化之视觉惯性VIO(二十-终结篇)
  • 如何做自己的游戏网站介绍自己做的电影网站
  • Qt Creator配置git插件功能
  • 【大前端】Vue 和 React 的区别详解 —— 两大前端框架深度对比