如何使用BeautifulSoup将soup对象转回HTML并保留原格式?
解决BeautifulSoup转回HTML时保留原始格式的问题
别用
prettify(),直接转成字符串
如果你不需要自动格式化的HTML,直接把soup对象转成字符串就行,这样输出的内容会最大程度贴近原始HTML的格式,不会凭空加换行和空格:html_output = str(soup) # 需处理编码的话用这个 html_output = soup.encode("utf-8").decode("utf-8")解析时给解析器加参数控制空格
不同解析器有参数可以控制空格保留,比如用lxml的时候,指定哪些标签要保留原始空格:from bs4 import BeautifulSoup soup = BeautifulSoup(your_html_content, 'lxml', preserve_whitespace_tags=['pre', 'code'])这样像
<pre>、<code>这类对空格敏感的标签,里面的格式会被完整保留。自定义格式化器(如果非要用prettify)
要是你需要用prettify()但不想它乱加格式,可以自己写个极简格式化器,覆盖默认的缩进逻辑:from bs4 import BeautifulSoup from bs4.formatter import HTMLFormatter class MinimalFormatter(HTMLFormatter): def indent(self, elem, level=0): # 取消自动缩进,不添加多余换行 return "" soup = BeautifulSoup(your_html_content, 'html.parser') # 编辑soup的操作... html_output = soup.prettify(formatter=MinimalFormatter())
内容的提问来源于stack exchange,提问作者Javi DR
相关产品推荐
相关产品推荐

