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

如何解决BeautifulSoup提取文本时<li>元素内容无分隔的问题

解决BeautifulSoup4提取
  • 文本无分隔的问题
  • 当HTML中<li>标签直接相邻(无空白字符间隔)时,使用BeautifulSoup的text属性提取内容会将多个<li>的文本直接拼接,导致内容连在一起。

    问题复现

    你的示例代码运行后输出First ElementSecond element,而期望得到First Element Second element。

    优雅解决方案

    方案1:使用get_text()指定分隔符

    BeautifulSoup的get_text()方法支持通过separator参数指定不同元素文本之间的分隔符,这是最简洁的解决方式:

    #!/usr/bin/env python3
    
    HTML="""
    <html>
    <body>
    <ul>
    <li>First Element</li><li>Second element</li>
    </ul>
    </body>
    """
    
    from bs4 import BeautifulSoup
    soup = BeautifulSoup(HTML, 'html.parser')
    # 指定分隔符为空格,同时strip=True去除首尾空白
    print(soup.find('body').get_text(separator=' ', strip=True))
    

    运行输出:

    First Element Second element
    

    方案2:遍历<li>元素拼接文本

    如果需要更精细的控制(比如处理部分<li>的特殊情况),可以直接遍历所有<li>元素,手动拼接文本:

    #!/usr/bin/env python3
    
    HTML="""
    <html>
    <body>
    <ul>
    <li>First Element</li><li>Second element</li>
    </ul>
    </body>
    """
    
    from bs4 import BeautifulSoup
    soup = BeautifulSoup(HTML, 'html.parser')
    # 找到所有<li>元素,提取文本后用空格连接
    li_texts = [li.text.strip() for li in soup.find_all('li')]
    print(' '.join(li_texts))
    

    关于"全局加空格"的疑问

    你提到的全局在<li>前加空格确实属于临时取巧方案,存在两个问题:

    1. 如果HTML中<li>本身前后有换行、空格等空白字符,会导致最终文本出现多个连续空格;
    2. 灵活性差,无法应对不同元素的分隔需求(比如某些场景需要换行而非空格)。
      上面两种方案更可靠,能根据实际需求灵活调整。

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

    相关产品推荐
    方舟 Agent Plan

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

    最近更新时间:2026.08.02 16:50:20