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

如何用Python的BeautifulSoup提取XML并生成指定格式输出?

提取XML实体信息生成表格格式

问题背景

我有一个大型XML文件,已通过Python的BeautifulSoup库提取出指定部分,现在需要将<entity-list>下所有<entity>及其<property>信息转换成指定的表格格式。

现有提取代码

from bs4 import BeautifulSoup
file = open("Physical document path", "r", encoding='utf-8')
contents = file.read()
soup = BeautifulSoup(contents, 'xml')
titles = soup.find_all('entity-list', code='Organization')
print(titles)

已过滤的XML内容

[<entity-list code="Organization">
<entity name="Energy Xxi Gulf Coast Inc">
<property code="sym">NASDAQ-NMS.EXXI</property>
<property code="acorn">4286423188</property>
<property code="use">primary</property>
</entity>
<entity name="Tema Oil and Gas Company">
<property code="acorn">1041746798</property>
<property code="uacorn">1452918703</property>
<property code="use">mention</property>
</entity>
<entity name="Rosehill Resources Inc">
<property code="sym">NASDAQ-SMALL.ROSE</property>
<property code="acorn">5011400606</property>
<property code="use">mention</property>
</entity>
<entity name="Energy Xxi (Bermuda) Limited">
<property code="acorn">0925670741</property>
<property code="use">primary</property>
</entity>
<entity name="Epl Oil &amp; Gas Inc.">
<property code="acorn">3058472513</property>
<property code="uacorn">4286423188</property>
<property code="use">mention</property>
</entity>
<entity name="Patterson-UTI Energy Inc.">
<property code="sym">NASDAQ-NMS.PTEN</property>
<property code="acorn">3673909660</property>
<property code="use">mention</property>
</entity>
<entity name="University of Illinois">
<property code="acorn">4117851479</property>
<property code="use">mention</property>
</entity>
<entity name="Tulane University">
<property code="acorn">1572344836</property>
<property code="use">mention</property>
</entity>
<entity name="Morgan Stanley &amp; Co. LLC">
<property code="acorn">0308068010</property>
<property code="uacorn">3605295726</property>
<property code="use">mention</property>
</entity>
<entity name="Morgan Stanley">
<property code="sym">NYSE.APF</property>
<property code="acorn">3605295726</property>
<property code="use">parent</property>
</entity>
</entity-list>]

期望输出格式

实体名称symacornuacornuse
Energy Xxi Gulf Coast IncNASDAQ-NMS.EXXI4286423188-primary
Tema Oil and Gas Company-10417467981452918703mention
Rosehill Resources IncNASDAQ-SMALL.ROSE5011400606-mention

解决方案代码

方法1:生成Markdown表格

from bs4 import BeautifulSoup

# 读取并解析XML
file = open("Physical document path", "r", encoding='utf-8')
contents = file.read()
soup = BeautifulSoup(contents, 'xml')
entity_list = soup.find('entity-list', code='Organization')

# 收集所有实体数据
entities_data = []
columns = ['实体名称', 'sym', 'acorn', 'uacorn', 'use']

for entity in entity_list.find_all('entity'):
    entity_info = {'实体名称': entity.get('name')}
    # 遍历当前实体的所有属性
    for prop in entity.find_all('property'):
        code = prop.get('code')
        entity_info[code] = prop.text.strip()
    # 补全缺失的列,用'-'填充
    for col in columns[1:]:
        if col not in entity_info:
            entity_info[col] = '-'
    entities_data.append(entity_info)

# 生成Markdown表格
markdown_table = '| ' + ' | '.join(columns) + ' |\n'
markdown_table += '| ' + ' | '.join(['---']*len(columns)) + ' |\n'
for data in entities_data:
    row = [data[col] for col in columns]
    markdown_table += '| ' + ' | '.join(row) + ' |\n'

# 输出表格
print(markdown_table)
# 保存到文件
with open('entity_table.md', 'w', encoding='utf-8') as f:
    f.write(markdown_table)

方法2:用Pandas导出为Excel等格式

如果需要更灵活的导出选项,可使用Pandas:

from bs4 import BeautifulSoup
import pandas as pd

file = open("Physical document path", "r", encoding='utf-8')
contents = file.read()
soup = BeautifulSoup(contents, 'xml')
entity_list = soup.find('entity-list', code='Organization')

entities_data = []
for entity in entity_list.find_all('entity'):
    entity_info = {'实体名称': entity.get('name')}
    for prop in entity.find_all('property'):
        entity_info[prop.get('code')] = prop.text.strip()
    entities_data.append(entity_info)

# 转换为DataFrame并整理格式
df = pd.DataFrame(entities_data)
df = df[['实体名称', 'sym', 'acorn', 'uacorn', 'use']].fillna('-')

# 输出Markdown表格到控制台
print(df.to_markdown(index=False))
# 导出到Excel文件
df.to_excel('entities_table.xlsx', index=False, encoding='utf-8')

代码说明

  1. 定位目标<entity-list>节点;
  2. 遍历每个<entity>,提取name属性作为“实体名称”;
  3. 遍历实体下的所有<property>,以code为键、文本内容为值存入字典;
  4. 补全缺失属性列,用-填充空值;
  5. 生成Markdown表格或用Pandas导出为Excel等格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:55:03