如何提取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
相关产品推荐
相关产品推荐

