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

使用BeautifulSoup提取含href的<a>标签段落文本时单词粘连问题解决

解决BeautifulSoup提取文本时的标签粘连问题

问题根源是BeautifulSoup默认的.get_text()方法会直接拼接所有子标签的文本,不会在标签之间添加分隔符,导致相邻文本(比如<p>内的普通文本和<a>标签文本)粘连在一起。

方法一:使用内置分隔符参数(最简洁Pythonic)

直接利用get_text()的separator参数,在不同标签的文本之间插入空格,再清理多余的连续空格:

from bs4 import BeautifulSoup
import requests

url = "https://witcher.fandom.com/wiki/Of_Banquets,_Bastards_and_Burials"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

# 提取所有<p>标签
for paragraph in soup.find_all("p"):
    # 用空格分隔标签文本,同时去除首尾空白
    raw_text = paragraph.get_text(separator=" ", strip=True)
    # 合并连续的多个空格为单个
    clean_text = " ".join(raw_text.split())
    print(clean_text)

这个方法依赖BeautifulSoup的原生功能,代码简洁易读,完全符合Pythonic的风格,适合新手快速解决问题。

方法二:递归自定义文本提取(灵活扩展)

如果需要对不同类型的标签做差异化处理(比如除了<a>还需要处理<em>、<strong>等),可以写一个递归函数遍历节点:

def extract_clean_text(element):
    text_fragments = []
    for child in element.children:
        if child.name is None:
            # 处理纯文本节点,去除首尾空白
            text_fragments.append(child.strip())
        else:
            # 递归处理子标签,提取文本后添加空格分隔
            text_fragments.append(child.get_text(strip=True))
            text_fragments.append(" ")
    # 拼接所有片段,清理多余空格
    combined_text = "".join(text_fragments).strip()
    return " ".join(combined_text.split())

# 使用示例
for paragraph in soup.find_all("p"):
    print(extract_clean_text(paragraph))

这个方法可以根据需求调整不同标签的处理逻辑,比如对<a>标签额外添加括号标注链接文本,或者忽略某些特定标签的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:58:16