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

如何在自定义Python函数中集成BeautifulSoup4的.prettify()方法美化列表输出

解决列表美观打印的问题

嘿,我明白你想让输出更易读的需求啦~不过得先澄清一个点:soup.prettify()是用来格式化HTML结构的方法,它是给BeautifulSoup对象或者HTML标签用的,没法直接处理你返回的Python列表。不过我们可以换两种思路来实现美观输出的目标:

方案1:美化Python列表的打印格式

如果只是想让提取到的标题列表看起来更清晰,不用HTML格式,直接用Python自带的工具就能搞定:

方式A:逐个打印带编号的标题

这种方式最直观,适合阅读:

from bs4 import BeautifulSoup

def get_titles(html):
    soup = BeautifulSoup(html,'html.parser')
    # 先过滤掉空文本和纯空白字符,避免输出冗余内容
    outcome = [text.strip() for text in soup.div.find_all(text=True) if text.strip()]
    return outcome

# 调用示例
html = '''<div>
    Title 1
    <span>Title 2</span>
    Title 3
    <p>Title 4</p>
</div>'''
titles = get_titles(html)

print("提取到的标题:")
for idx, title in enumerate(titles, 1):
    print(f"{idx}. {title}")

输出效果:

提取到的标题:
1. Title 1
2. Title 2
3. Title 3
4. Title 4

方式B:用pprint模块格式化列表

如果你想保留列表结构但更易读,可以用Python标准库的pprint:

from bs4 import BeautifulSoup
from pprint import pprint

def get_titles(html):
    soup = BeautifulSoup(html,'html.parser')
    outcome = [text.strip() for text in soup.div.find_all(text=True) if text.strip()]
    return outcome

html = '''<div>
    Title 1
    <span>Title 2</span>
    Title 3
    <p>Title 4</p>
</div>'''
titles = get_titles(html)

print("格式化后的列表:")
pprint(titles)

输出效果:

格式化后的列表:
['Title 1', 'Title 2', 'Title 3', 'Title 4']

方案2:生成美观的HTML格式输出

如果你确实想借助prettify()来输出HTML格式的美观内容,可以先把提取到的标题构建成新的HTML结构,再调用prettify():

from bs4 import BeautifulSoup

def get_titles(html):
    soup = BeautifulSoup(html,'html.parser')
    outcome = [text.strip() for text in soup.div.find_all(text=True) if text.strip()]
    
    # 创建一个新的BeautifulSoup对象,用来构建美观的HTML结构
    new_soup = BeautifulSoup("", 'html.parser')
    # 比如用无序列表包裹所有标题
    ul_tag = new_soup.new_tag('ul')
    for title in outcome:
        li_tag = new_soup.new_tag('li')
        li_tag.string = title
        ul_tag.append(li_tag)
    new_soup.append(ul_tag)
    
    # 用prettify()格式化输出HTML
    return new_soup.prettify()

html = '''<div>
    Title 1
    <span>Title 2</span>
    Title 3
    <p>Title 4</p>
</div>'''
print(get_titles(html))

输出效果:

<ul>
 <li>
  Title 1
 </li>
 <li>
  Title 2
 </li>
 <li>
  Title 3
 </li>
 <li>
  Title 4
 </li>
</ul>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 19:42:43