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

Python爬虫问题:提取非<p>标签下<br>文本及同标签内多人员信息

解决方案

问题1:提取主席GUDJONSSON的信息

主席信息紧跟在<b>Chair:</b>标签之后,未包含在<p>内。可以通过定位该<b>标签,遍历后续节点收集完整信息:

# 定位包含"Chair:"的b标签
chair_b = soup.find("b", string=lambda text: text and "Chair:" in text)
if chair_b:
    chair_content = []
    next_node = chair_b.next_sibling
    # 遍历后续节点,直到遇到新的p或b标签停止
    while next_node and next_node.name not in ["p", "b"]:
        if isinstance(next_node, str):
            chair_content.append(next_node.strip())
        elif next_node.name == "br":
            chair_content.append("|")  # 用分隔符标记换行位置
        next_node = next_node.next_sibling
    # 拆分并提取主席的各项信息
    chair_info = [item for item in "".join(chair_content).split("|") if item]
    if len(chair_info) >= 5:
        chair_person = {
            "NAME": chair_info[0],
            "PROFESSION": chair_info[1],
            "DEPARTMENT": chair_info[2],
            "INSTITUTION": chair_info[3],
            "LOCATION": chair_info[4]
        }
        print(chair_person)

问题2:区分同一

标签内的WONDRAK和GERSCH

这类<p>标签包含多个人的信息,<br>数量超过4。可以直接提取<p>内所有纯文本,按每5项一组拆分(对应单个人的姓名/职业/部门/机构/地点):

for bullet in column:
    # 获取<p>内所有去除空白的纯文本,生成列表
    contents = list(bullet.stripped_strings)
    # 每5项为一个人的信息,循环拆分
    for i in range(0, len(contents), 5):
        if i + 4 < len(contents):
            person = {
                "NAME": contents[i],
                "PROFESSION": contents[i+1],
                "DEPARTMENT": contents[i+2],
                "INSTITUTION": contents[i+3],
                "LOCATION": contents[i+4]
            }
            print(person)

该方法兼容原本单个人的<p>标签(此时列表长度为5,仅生成一条人员信息),同时自动拆分包含多人的<p>标签。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:05:20