如何在自定义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
相关产品推荐
相关产品推荐

