Python:如何将Markdown格式文本转换为纯文本
我需要把markdown格式的文本转换成普通文本格式,这样可以在我的网站上显示摘要。我想要用Python来写这个代码。
7 个回答
8
这和Jason的回答有点像,但处理评论的方式更准确。
import markdown # pip install markdown
from bs4 import BeautifulSoup # pip install beautifulsoup4
def md_to_text(md):
html = markdown.markdown(md)
soup = BeautifulSoup(html, features='html.parser')
return soup.get_text()
def example():
md = '**A** [B](http://example.com) <!-- C -->'
text = md_to_text(md)
print(text)
# Output: A B
68
虽然这个问题已经很老了,但我想分享一个我最近想到的解决方案。这个方案既不使用BeautifulSoup,也不需要把内容转换成HTML再转换回来。
markdown模块的核心类Markdown有一个属性叫output_formats,这个属性是不能配置的,但在Python中几乎所有东西都可以进行修改,所以我们可以对它进行一些调整。这个属性是一个字典,它把输出格式的名称和对应的渲染函数联系起来。默认情况下,它有两种输出格式,分别是'html'和'xhtml'。通过一些小技巧,我们可以为它添加一个简单的文本渲染函数:
from markdown import Markdown
from io import StringIO
def unmark_element(element, stream=None):
if stream is None:
stream = StringIO()
if element.text:
stream.write(element.text)
for sub in element:
unmark_element(sub, stream)
if element.tail:
stream.write(element.tail)
return stream.getvalue()
# patching Markdown
Markdown.output_formats["plain"] = unmark_element
__md = Markdown(output_format="plain")
__md.stripTopLevelTags = False
def unmark(text):
return __md.convert(text)
unmark函数接收markdown文本作为输入,并返回去掉所有markdown字符的纯文本。
55
Markdown和BeautifulSoup(现在叫做beautifulsoup4)这两个模块可以帮助你完成你所描述的工作。
一旦你把Markdown转换成HTML格式,就可以使用一个HTML解析器来提取出纯文本。
你的代码可能看起来像这样:
from bs4 import BeautifulSoup
from markdown import markdown
html = markdown(some_html_string)
text = ''.join(BeautifulSoup(html).findAll(text=True))