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

Python使用BeautifulSoup解析XML提取作者ID、文本与标题的相关问题

问题解决方法

你提供的代码首先存在两个基础逻辑错误:

  • 解析XML时没有指定XML解析器,用了默认的HTML解析模式,会导致标签识别异常
  • 错误套用HTML逻辑读取soup.body,你的XML结构中不存在<body>标签,该变量为空,后续操作必然报错

以下是三个问题的具体解决方案:

1. 正确获取XML作者ID

你原来的代码错误将author_id当成了独立标签处理,实际上它是<div>标签的自定义属性,不能用select('author_id')获取。正确写法是先定位到根节点<div>,再读取对应属性值:

# 解析XML必须指定'lxml-xml'解析器
soup = BeautifulSoup(f, "lxml-xml")
div_root = soup.find('div')
author_id = div_root['author_id'].strip()

2. 提取文本内容的标签选择

应该选择<ab>标签提取文本内容:

  • <div>标签仅承载元数据属性,本身不包含直接的正文内容
  • 所有正文(包括标题、段落文本)都封装在<ab>子标签内,提取时直接获取<ab>标签的文本内容即可,会自动过滤掉<lb>这类排版标签:
ab_node = div_root.find('ab')
full_text = ab_node.get_text().strip()

3. 正确获取标题内容

标题是<ab>标签下的独立<title>子标签,直接定位后提取文本即可:

title = ab_node.find('title').get_text().strip()

修正后完整可运行代码

for filepath in dataset_filepaths:
    with open(filepath, 'r', encoding='utf-8') as f:
        # 解析XML必须指定lxml-xml解析器,避免HTML模式下标签识别错误
        soup = BeautifulSoup(f, "lxml-xml")
    
    # 获取作者ID
    div_root = soup.find('div')
    author = div_root['author_id'].strip()
    
    # 获取内容承载节点ab
    ab_node = div_root.find('ab')
    
    # 获取标题
    title = ab_node.find('title').get_text().strip()
    
    # 获取全文文本内容(自动过滤所有标签)
    full_content = ab_node.get_text().strip()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:24:07