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

如何用BeautifulSoup正确解析XML并生成完整结构化Pandas表格?

解决BeautifulSoup解析XML仅返回段落最后一项的问题

问题背景

使用BeautifulSoup解析XML文件时,已能解析各层级文本列,但当前代码仅返回每个段落的最后一项,无法生成包含所有条目的结构化Pandas表格。

问题代码片段

row = {}
for para in soup.find_all('paragraph'):
    row['para_title'] = para.find('title').text
    for item in para.find_all('content_item'):
        row['item_content'] = item.text
df = pd.DataFrame([row])

当前输出

para_title item_content
0  段落1标题    段落1最后一项内容

期望输出

para_title item_content
0  段落1标题    段落1第一项内容
1  段落1标题    段落1第二项内容
2  段落2标题    段落2第一项内容

XML文件内容

<root>
  <paragraph>
    <title>段落1标题</title>
    <content_item>段落1第一项内容</content_item>
    <content_item>段落1第二项内容</content_item>
  </paragraph>
  <paragraph>
    <title>段落2标题</title>
    <content_item>段落2第一项内容</content_item>
  </paragraph>
</root>

完整代码

from bs4 import BeautifulSoup
import pandas as pd

with open('data.xml', 'r', encoding='utf-8') as f:
    xml_content = f.read()

soup = BeautifulSoup(xml_content, 'xml')

row = {}
for para in soup.find_all('paragraph'):
    row['para_title'] = para.find('title').text
    for item in para.find_all('content_item'):
        row['item_content'] = item.text

df = pd.DataFrame([row])
print(df)

问题原因

代码仅初始化了一个row字典,在内层循环遍历条目时,每次都会覆盖row['item_content']的值;外层循环也会持续覆盖para_title,最终只保留了整个XML中最后一个段落的最后一项内容。

修正方案

初始化一个空列表存储所有条目,在内层循环中每次创建新的字典,将当前段落信息和条目内容存入后追加到列表,最后用完整列表生成DataFrame。

修正后的完整代码:

from bs4 import BeautifulSoup
import pandas as pd

with open('data.xml', 'r', encoding='utf-8') as f:
    xml_content = f.read()

soup = BeautifulSoup(xml_content, 'xml')

# 初始化空列表存储所有数据条目
data_list = []
for para in soup.find_all('paragraph'):
    para_title = para.find('title').text
    # 遍历当前段落下的所有条目
    for item in para.find_all('content_item'):
        # 每次循环创建新字典,避免数据覆盖
        row = {
            'para_title': para_title,
            'item_content': item.text
        }
        data_list.append(row)

# 用完整的数据列表生成结构化DataFrame
df = pd.DataFrame(data_list)
print(df)

验证输出

运行修正后的代码,将得到与期望一致的结构化表格:

para_title item_content
0  段落1标题    段落1第一项内容
1  段落1标题    段落1第二项内容
2  段落2标题    段落2第一项内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:55:04