加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – BeautifulSoup:剥离指定的属性,但保留标记及其内容

发布时间:2020-12-16 23:04:48 所属栏目:Python 来源:网络整理
导读:我正在尝试’defrontpagify’MS FrontPage生成的网站的html,我正在写一个BeautifulSoup脚本来做它. 但是,我试图从包含它们的文档中的每个标记中剥离特定属性(或列表属性)的部分.代码段: REMOVE_ATTRIBUTES = ['lang','language','onmouSEOver','onmouSEOut'
我正在尝试’defrontpagify’MS FrontPage生成的网站的html,我正在写一个BeautifulSoup脚本来做它.

但是,我试图从包含它们的文档中的每个标记中剥离特定属性(或列表属性)的部分.代码段:

REMOVE_ATTRIBUTES = ['lang','language','onmouSEOver','onmouSEOut','script','style','font','dir','face','size','color','class','width','height','hspace','border','valign','align','background','bgcolor','text','link','vlink','alink','cellpadding','cellspacing']

# remove all attributes in REMOVE_ATTRIBUTES from all tags,# but preserve the tag and its content. 
for attribute in REMOVE_ATTRIBUTES:
    for tag in soup.findAll(attribute=True):
        del(tag[attribute])

它运行没有错误,但实际上并没有删除任何属性.当我在没有外部循环的情况下运行它时,只需对单个属性进行硬编码(soup.findAll(‘style’= True),它就可以了.

有人知道这里有问题吗?

PS – 我也不太喜欢嵌套循环.如果有人知道更具功能性的map / filter-ish风格,我很乐意看到它.

解决方法

这条线
for tag in soup.findAll(attribute=True):

没有找到任何标签.可能有一种方法可以使用findAll;我不确定.但是,这有效:

import BeautifulSoup
REMOVE_ATTRIBUTES = [
    'lang','cellspacing']

doc = '''<html><head><title>Page title</title></head><body><p id="firstpara" align="center">This is <i>paragraph</i> <a onmouSEOut="">one</a>.<p id="secondpara" align="blah">This is <i>paragraph</i> <b>two</b>.</html>'''
soup = BeautifulSoup.BeautifulSoup(doc)
for tag in soup.recursiveChildGenerator():
    try:
        tag.attrs = [(key,value) for key,value in tag.attrs
                     if key not in REMOVE_ATTRIBUTES]
    except AttributeError: 
        # 'NavigableString' object has no attribute 'attrs'
        pass
print(soup.prettify())

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读