我正在尝试’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())
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。