2024-09-30 02:34:16 发布
网友
是否有一个纯Python工具来获取一些HTML,并尽可能将其截断到给定的长度,但要确保生成的代码片段格式正确?例如,给定此HTML:
<h1>This is a header</h1> <p>This is a paragraph</p>
它不会产生:
但是:
<h1>This is a header</h1>
或者至少:
<h1>This is a hea</h1>
我找不到一个有效的,尽管我找到了一个依赖于pullparser的方法,它既过时又过时。在
pullparser
我发现斯莱西的回答很有帮助,如果我有这个名声,我会投赞成票的,——不过,还有一件事需要注意。在我的环境中,我安装了html5lib和BeautifulSoup4。html代码段ULSL5被包装在html代码段中,这是我不想要的html代码。在
>>> truncate_html("<p>sdfsdaf</p>", 4) u'<html><head></head><body><p>s</p></body></html>'
为了解决这些问题,我告诉beauthoulsoup使用python解析器:
我不认为您需要一个成熟的解析器-您只需要将输入字符串标记为以下类型之一:
一旦有了这样的令牌流,就很容易使用堆栈来跟踪需要关闭的标记。我之前确实遇到过这个问题,写了一个小库来做这个:
https://github.com/eentzel/htmltruncate.py
它对我很好地工作,并且可以很好地处理大多数角落的情况,包括任意嵌套的标记、将字符实体计数为单个字符、返回格式错误的标记等
它将产生:
以你为例。这也许可以更改,但在一般情况下很难——如果您试图将其截断为10个字符,但是<h1>标记没有关闭,比如说,300个字符,怎么办?在
<h1>
如果使用的是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的代码:
我发现斯莱西的回答很有帮助,如果我有这个名声,我会投赞成票的,——不过,还有一件事需要注意。在我的环境中,我安装了html5lib和BeautifulSoup4。html代码段ULSL5被包装在html代码段中,这是我不想要的html代码。在
为了解决这些问题,我告诉beauthoulsoup使用python解析器:
^{pr2}$我不认为您需要一个成熟的解析器-您只需要将输入字符串标记为以下类型之一:
一旦有了这样的令牌流,就很容易使用堆栈来跟踪需要关闭的标记。我之前确实遇到过这个问题,写了一个小库来做这个:
https://github.com/eentzel/htmltruncate.py
它对我很好地工作,并且可以很好地处理大多数角落的情况,包括任意嵌套的标记、将字符实体计数为单个字符、返回格式错误的标记等
它将产生:
以你为例。这也许可以更改,但在一般情况下很难——如果您试图将其截断为10个字符,但是
<h1>
标记没有关闭,比如说,300个字符,怎么办?在如果使用的是DJANGO lib,则可以简单地:
不管怎样,以下是从django截短\u html_words的代码:
^{pr2}$相关问题 更多 >
编程相关推荐