You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何解析HTML中script标签内的JSON数据并提取经纬度

问题解决方法

你的三个报错均是未正确提取到合法JSON字符串导致,按以下步骤修正即可:

  • 首先,all_scripts.contents是BeautifulSoup返回的标签子节点列表,你需要的JS文本存储在列表的第一个元素中,直接传入列表会触发类型错误;把列表整体转字符串会带上列表的方括号、引号等语法符号,自然无法解析为JSON。
  • 其次,你拿到的原始文本是JS赋值语句,需要先剥离window.storeFinderComponent = 前缀和末尾可能存在的分号,才能得到纯JSON内容。

完整可运行代码如下:

import requests
from bs4 import BeautifulSoup
import json

# 原有页面请求逻辑
sauce = requests.get(
    'https://www.ep.de/store-finder', 
    verify=False, 
    headers = {'User-Agent':'Mozilla/5.0'}
)
soup1 = BeautifulSoup(sauce.text, features="html.parser")
target_script = soup1.find_all('script')[6]

# 解析JSON核心逻辑
# 1. 取出script标签内的原始JS字符串
js_content = target_script.contents[0]
# 2. 剥离赋值前缀和末尾分号,得到纯JSON字符串
json_str = js_content.split('window.storeFinderComponent = ')[1].strip().rstrip(';')
# 3. 转为Python字典
store_data = json.loads(json_str)

# 提取经纬度示例
for store in store_data.get('stores', []):
    print(store.get('lat'), store.get('lng'))

异常排查

如果出现分割索引错误,可先打印js_content确认前缀的实际写法,调整split方法的匹配字符串即可;如果JSON存在JS特有的尾随逗号等语法,可安装使用demjson3库替代标准json库做容错解析。

内容的提问来源于stack exchange,提问作者Lasse Bieber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 19:45:03