首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Python从html字符串中删除(而不是删除)指定的标记?

如何使用Python从html字符串中删除(而不是删除)指定的标记?
EN

Stack Overflow用户
提问于 2017-08-28 04:35:03
回答 2查看 441关注 0票数 1

使用Python从HTML字符串中删除(而不是删除)指定标记的正确方法。

代码语言:javascript
复制
def strip_tags(html, tags=[]):
    ....
    pass #return the html string by stripping the tags from the list

这些问题解释了一切。

我将编写一个python函数,该函数以HTML作为输入,以及要删除的标记列表(模仿Django模板的removetags功能,因为它是不推荐的)

最简单的方法是什么?

以下方法对我无效,原因如下:

  • 使用正则表达式(出于显而易见原因)
  • 令人惊讶的是,Bleach库中的Clean()方法.这样一个健壮的库对于这个需求是无用的,因为它遵循白名单优先的方法,而问题是黑名单优先。漂白剂只适用于“保留”某些标签,而不用于删除特定的标签(除非您已准备好保留所有可能的ALLOWED_TAGS)。
  • lxml.html.Cleaner()remove_tagskill_tags相结合有点接近于我所寻找的东西,但它做的比它应该做的更多,而且没有办法以最好的方式控制行为,比如请求Cleaner()保留邪恶的<script>标签。
  • BeautifulSoup。它有一个名为清空()的方法来删除指定的标记,但是它删除了标记的内容,而我只需要去掉标记,而是保留内容。
EN

回答 2

Stack Overflow用户

发布于 2017-08-28 08:26:12

美汤有unwrap()

它用标签里面的任何东西代替标签。

您必须手动迭代要替换的所有标记。

票数 1
EN

Stack Overflow用户

发布于 2017-08-28 08:35:50

您可以扩展Python的HTMLParser并创建自己的解析器以跳过指定的标记。

使用给定链路中提供的示例,我将修改它以去掉<h1></h1>标记,但保留它们的数据:

代码语言:javascript
复制
from html.parser import HTMLParser

NOT_ALLOWED_TAGS = ['h1']

class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        if tag not in NOT_ALLOWED_TAGS:
            print("Encountered a start tag:", tag)

    def handle_endtag(self, tag):
        if tag not in NOT_ALLOWED_TAGS:
            print("Encountered an end tag :", tag)

    def handle_data(self, data):
        print("Encountered some data  :", data)

parser = MyHTMLParser()
parser.feed('<html><head><title>Test</title></head>'
            '<body><h1>Parse me!</h1></body></html>')

它将返回:

代码语言:javascript
复制
Encountered a start tag: html
Encountered a start tag: head
Encountered a start tag: title
Encountered some data  : Test
Encountered an end tag : title
Encountered an end tag : head
Encountered a start tag: body 
# h1 start tag here
Encountered some data  : Parse me!
# h1 close tag here
Encountered an end tag : body
Encountered an end tag : html

您现在可以维护一个NOT_ALLOWED_TAG列表,用于剥离这些标记。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45911848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档