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

如何用BeautifulSoup提取HTML片段生成指定结构的自定义列表?

将BeautifulSoup提取的动态列表转换为固定结构列表

问题描述

现有三段HTML片段,通过以下代码提取内容:

from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "lxml") # 分别传入html_1、html_2、html_3
res = soup.find("span", class_="font-weight-bold")
print(res.text.split())

得到的拆分结果为:

['issue_number', '4', 'Näköispainos', '6.12.1939'] # html_1
['issue_number', '8', '1998']                      # html_2
['1905']                                           # html_3

需要将这些动态长度的列表转换为固定4元素结构,对应["issue_number", "number", "extension", "date"],缺失位置用None填充,期望输出:

['issue_number', '4', 'Näköispainos', '6.12.1939'] # html_1
['issue_number', '8', None, '1998']                # html_2
[None, None, None, '1905']                         # html_3

解决方案

通过对拆分后的列表进行特征匹配,填充到固定结构中,缺失项补None,代码实现如下:

from bs4 import BeautifulSoup

def parse_issue_content(html):
    soup = BeautifulSoup(html, "lxml")
    target_span = soup.find("span", class_="font-weight-bold")
    # 初始化固定结构的结果列表,默认全为None
    result = [None, None, None, None]
    
    if not target_span:
        return result
    
    parts = target_span.text.split()
    # 处理包含issue_number的情况
    if parts and parts[0] == "issue_number":
        result[0] = parts[0]
        # 填充number字段
        if len(parts) >= 2:
            result[1] = parts[1]
        # 处理剩余元素
        if len(parts) == 4:
            result[2] = parts[2]
            result[3] = parts[3]
        elif len(parts) == 3:
            # 此时第三个元素是date,extension留空
            result[3] = parts[2]
    else:
        # 仅包含日期的情况
        if len(parts) == 1:
            result[3] = parts[0]
    
    return result

# 测试调用示例
# print(parse_issue_content(html_1))
# print(parse_issue_content(html_2))
# print(parse_issue_content(html_3))

逻辑说明

  1. 先创建一个全为None的4元素列表,保证结构固定;
  2. 检查是否找到目标span元素,未找到则直接返回全None列表;
  3. 拆分span文本内容后,判断是否以issue_number开头:
    • 若是则依次填充issue_number和number字段;
    • 根据元素总数判断剩余字段:长度为4时填充extension和date,长度为3时仅填充date;
  4. 若不以issue_number开头,且仅一个元素,则将其作为date填充到最后一位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:20:17