Python中的HTML截断

2024-09-30 02:34:16 发布

您现在位置:Python中文网/ 问答频道 /正文

是否有一个纯Python工具来获取一些HTML,并尽可能将其截断到给定的长度,但要确保生成的代码片段格式正确?例如,给定此HTML:

<h1>This is a header</h1>
<p>This is a paragraph</p>

它不会产生:

^{pr2}$

但是:

<h1>This is a header</h1>

或者至少:

<h1>This is a hea</h1>

我找不到一个有效的,尽管我找到了一个依赖于pullparser的方法,它既过时又过时。在


Tags: 工具方法代码ishtml格式thish1
3条回答

我发现斯莱西的回答很有帮助,如果我有这个名声,我会投赞成票的,——不过,还有一件事需要注意。在我的环境中,我安装了html5lib和BeautifulSoup4。html代码段ULSL5被包装在html代码段中,这是我不想要的html代码。在

>>> truncate_html("<p>sdfsdaf</p>", 4)
u'<html><head></head><body><p>s</p></body></html>'

为了解决这些问题,我告诉beauthoulsoup使用python解析器:

^{pr2}$

我不认为您需要一个成熟的解析器-您只需要将输入字符串标记为以下类型之一:

  • 文本
  • 打开标签
  • 结束标记
  • 自动关闭标签
  • 字符实体

一旦有了这样的令牌流,就很容易使用堆栈来跟踪需要关闭的标记。我之前确实遇到过这个问题,写了一个小库来做这个:

https://github.com/eentzel/htmltruncate.py

它对我很好地工作,并且可以很好地处理大多数角落的情况,包括任意嵌套的标记、将字符实体计数为单个字符、返回格式错误的标记等

它将产生:

<h1>This is a hea</h1>

以你为例。这也许可以更改,但在一般情况下很难——如果您试图将其截断为10个字符,但是<h1>标记没有关闭,比如说,300个字符,怎么办?在

如果使用的是DJANGO lib,则可以简单地:

from django.utils import text, html

    class class_name():


        def trim_string(self, stringf, limit, offset = 0):
            return stringf[offset:limit]

        def trim_html_words(self, html, limit, offset = 0):
            return text.truncate_html_words(html, limit)


        def remove_html(self, htmls, tag, limit = 'all', offset = 0):
            return html.strip_tags(htmls)

不管怎样,以下是从django截短\u html_words的代码:

^{pr2}$

相关问题 更多 >

    热门问题