【发布时间】:2012-01-28 09:03:16
【问题描述】:
我正在尝试对 MS FrontPage 生成网站的 html 进行“defrontpagify”,并且正在编写一个 BeautifulSoup 脚本来执行此操作。
但是,我在尝试从包含它们的文档中的每个标记中去除特定属性(或列表属性)的部分上遇到了困难。代码sn-p:
REMOVE_ATTRIBUTES = ['lang','language','onmouseover','onmouseout','script','style','font',
'dir','face','size','color','style','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 - 我也不太喜欢嵌套循环。如果有人知道更实用的地图/过滤器风格,我很乐意看到它。
【问题讨论】:
-
对我来说,如果将
soup.findAll(attribute=True)更改为简单的soup.findAll(),它就可以工作。 -
不错,确实有效。事后看来很明显,不需要检查两次属性值。唯一的问题是它会检查文档中每个标签的所有属性,运行时间是原来的两倍,但 5 秒与 2.5 秒的约 15 个页面在这里没什么大不了的。
标签: python web-scraping beautifulsoup scraper frontpage