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
相关产品推荐
相关产品推荐

