我正在使用Python和Flask创建一个博客(以及网站的其余部分)。博客帖子使用Markdown编写,并使用创造性名称Markdown in Python转换为HTML。 Markdown(用于将来编辑)和HTML(用于显示)都存储在数据库中。
我希望能够自动获取文字的前300个字符(或500或200 - 我还没有算出数字)在我不想要的时候在页面上使用显示完整的博客文章(如首页)。但问题是,任何简单的方法都可能可能使我无法使用HTML或Markdown :
HTML:
<p><em>Here</em> is <strong>formatted</strong> text.</p>
如果我得到了前10个字符,它会让我离开格式化,我会以某种方式关闭<strong>
和<p>
标记。< / p>
降价:
*Here* is **formatted** text.
同样,获取前十个字符将使我需要关闭**
以获取粗体。
有什么方法可以做到这一点而无需编写HTML或Markdown解析器?或者,我最好将HTML转换为纯文本吗?
答案 0 :(得分:2)
事实上,最简单,最安全的方法是从Markdown源生成HTML,将其转换为纯文本(请参阅html2plaintext),然后将其修剪为300个字符。
更有效的方法可能是修改Markdown解析器以仅输出所有文本节点的前300个字符,但我真的不认为这些修改证明了性能优势。
答案 1 :(得分:2)
如果你的摘要只是纯文本,那么Adam的回答肯定是最好的 - 首先转换为纯文本,然后截断。
如果你想保持格式化,那么这是另一个想法:
如果您使用任意HTML进行此操作,那么您可能需要担心许多奇怪的事情,但是因为您来自降价,它实际上应该可以正常工作。任何体面的降价转换器都应该生成结构良好的HTML,其中包含相当少量的标签。
答案 2 :(得分:1)
不知道它是否适用于Python,但this tutorial可能会对您有所帮助。基本上它会在修剪文本并自动关闭它后扫描未关闭的标记。
答案 3 :(得分:1)
使用偶数解析器,忽略非文本事件,捕获文本事件,直到达到300个字符,然后停止解析。
libxml支持基于事件的html解析。我确定有一个用于降价,但还没看过。
您应该进行衡量,以确保性能优势值得增加复杂性。