问题及说明
- 将一段html语言描述的文本,转换为保留一定格式的纯文本字符。
保留缩进、序号等。- 该效果为自定义代码实现。
- 实现代码语言为python。
html表示效果图如下:
纯文本效果如下:
调研
在决定自定义实现上述效果前,对现有技术实现调研结果如下:
BeautifulSoup.getText()
依赖库:pip bs4
对应的html文本为:
<ol><li>这是<span style="color: rgb(225, 60, 57);"><strong>第1段</strong></span>文本需求.</li><li>这是<u><em>第2段</em></u>文本需求。</li></ol>
测试代码:
# 1 -------------- p不换行,ol没有序号
# soup = BeautifulSoup(html_text, 'html.parser')
soup = BeautifulSoup(html_text, 'html5lib') # pip html5lib
# soup = BeautifulSoup(html_text, 'lxml')
return soup.getText()
处理效果如下:
- 没有缩进
- 没有换行
- 没有序号
这是第1段文本需求.这是第2段文本需求。
html2text
依赖库:pip html2text
代码:
md = html2text.html2text(html_text)
这是html转markdown文本的库。不是转纯文本的。
pandoc
格式相对较好,但是慢。
对于列表缩进效果不理想。
html样例图:
html文本:
<div>
<h1>标题1</h1>
<h2> 标题2(缩进1个tab)</h2>
<p>有序列表:</p>
<ol>
<li>第1段</li>
<li>第2段</li>
</ol>
<p> 有序<span style="background-color: rgb(54, 207, 201);">列表</span>:(<span
style="color: rgb(231, 95, 51);">缩进1个tab</span>)</p>
<ol>
<ol>
<li>第1段</li>
<li>第2段</li>
</ol>
</ol>
<p>无序列表:</p>
<ul>
<li>第一</li>
<li>第二</li>
</ul>
<p> 无序列表:(<span style="color: rgb(231, 95, 51);"