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

树莓派项目:Python从实时HTML页面提取JSON数据的问题

解决方法

你现在的问题在于请求的是静态HTML页面,而真实数据是通过前端JS调用readVal接口动态获取的,所以HTML源码里只有占位符,不是实时数据。直接请求readVal接口就能拿到纯JSON数据,不用解析HTML。

步骤1:直接请求数据接口

把请求的URL改成设备的readVal接口地址,通常是http://192.168.4.1/readVal(如果前端JS里的请求路径是相对路径的话)。

基于你现有代码的修改版本

import urllib.request
import json
import time

# 实时获取数据的循环
while True:
    try:
        # 请求readVal接口
        response = urllib.request.urlopen("http://192.168.4.1/readVal")
        # 读取并解码为字符串
        data_str = response.read().decode('utf-8')
        # 解析JSON
        data_json = json.loads(data_str)
        
        # 提取需要的字段(根据接口返回的实际字段名调整)
        # 假设接口返回的JSON结构类似 {"N": "传感器名称", "V": 5.2, "U": "V"}
        sensor_name = data_json.get("N")
        voltage_value = data_json.get("V")
        unit = data_json.get("U")
        
        print(f"名称: {sensor_name}, 电压: {voltage_value}{unit}")
        
        # 模拟前端200ms的请求间隔
        time.sleep(0.2)
    except Exception as e:
        print(f"请求或解析出错: {e}")
        time.sleep(1)  # 出错后延迟1秒再重试

更简洁的requests版本(需先安装:pip install requests)

如果你愿意用更易用的库,requests会比urllib更简洁:

import requests
import time

while True:
    try:
        # 发送GET请求到readVal接口
        res = requests.get("http://192.168.4.1/readVal")
        res.raise_for_status()  # 检查请求是否成功
        data_json = res.json()  # 直接解析JSON
        
        # 提取数据
        sensor_name = data_json["N"]
        voltage_value = data_json["V"]
        unit = data_json["U"]
        
        print(f"名称: {sensor_name}, 电压: {voltage_value}{unit}")
        
        time.sleep(0.2)
    except Exception as e:
        print(f"出错: {e}")
        time.sleep(1)

注意事项

  • 如果readVal接口不是GET请求(比如是POST),需要查看前端JS里的请求方式,调整代码中的请求方法。
  • 确保树莓派和设备在同一WiFi网络下,能正常访问192.168.4.1。
  • 如果接口返回的JSON字段名不是N、V、U,可以先打印data_json查看完整结构,再调整提取的字段名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:15:36