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

如何提取BeautifulSoup解析返回的未知类型数据?find/find_all失效原因

问题解答

1. 数据格式说明

你拿到的API响应本质是JSON格式,并非HTML。虽然文档里的内容看起来类似HTML结构,但那是因为你错误地用BeautifulSoup(HTML解析库)去解析JSON字符串,导致JSON被当作无效HTML解析后呈现出的异常结构。从你的代码里json.loads(soup.text)这一行也能佐证——你最终还是把soup的文本内容当作JSON来解析,说明原始响应就是JSON数据。

2. find()/find_all()失效的原因

BeautifulSoup的核心是解析HTML/XML标签结构,它只能识别符合HTML/XML规范的标签元素。而你的API返回的是JSON字符串,当你把JSON传给BeautifulSoup时,它会把整个JSON当作纯文本或者零散的无效节点处理,生成的soup对象里不存在你期望的HTML标签结构,自然无法用find()/find_all()找到目标元素。

3. 修正后的代码示例

直接跳过BeautifulSoup,对响应内容做JSON解析即可:

# Import libs
import pandas as pd
import requests
import json

# Reading codes from local CSV file on my computer
# 注意:需替换成CSV中存储代码的列名
dp_code = pd.read_csv("code.csv")["代码列名"].tolist()

# Form Data for passing to the request body
formdata = {'objid': '14'}

# URL
url = "https://www.somewebsite.com"

# Query
for i in dp_code:
    formdata["objid"] = str(i)
    response = requests.request("POST", url, data=formdata, timeout=1500)
    # 直接解析响应的JSON内容,无需BeautifulSoup
    json_data = response.json()
    # 修正原代码变量名笔误,替换为实际JSON中的键
    df = pd.DataFrame(json_data["form"])
    df.to_csv(f"{i}.csv", index=False)

额外修正提示:

  • 原代码中dp_code = ("code.csv")仅定义了字符串,未读取CSV内容,需用pd.read_csv提取代码列数据。
  • 原代码里的bat["form"]属于变量名笔误,应改为解析后的JSON对象对应键名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:11:16