如何使用BeautifulSoup更改标签名称?

24
我使用Python和BeautifulSoup解析HTML文档。
现在,我需要将HTML文档中所有的

元素替换为


如何更改标签名称而不更改文档中的其他内容?

3个回答

37

我不知道你是如何访问tag的,但以下方法对我有效:

import BeautifulSoup

if __name__ == "__main__":
    data = """
<html>
<h2 class='someclass'>some title</h2>
<ul>
   <li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li>
   <li>Aliquam tincidunt mauris eu risus.</li>
   <li>Vestibulum auctor dapibus neque.</li>
</ul>
</html>

    """
    soup = BeautifulSoup.BeautifulSoup(data)
    h2 = soup.find('h2')
    h2.name = 'h1'
    print soup

print soup 命令的输出为:

<html>
<h1 class='someclass'>some title</h1>
<ul>
<li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li>
<li>Aliquam tincidunt mauris eu risus.</li>
<li>Vestibulum auctor dapibus neque.</li>
</ul>
</html>

正如您所看到的,h2 变成了 h1。文档中没有其他任何变化。我正在使用 Python 2.6 和 BeautifulSoup 3.2.0。

如果您有多个h2并且想要将它们全部更改,您可以简单地执行以下操作:

soup = BeautifulSoup.BeautifulSoup(your_data)
while True: 
    h2 = soup.find('h2')
    if not h2:
        break
    h2.name = 'h1'

不知道为什么以前对我没起作用。谢谢你的答案。 - daphshez

3

只是这样:

tag.name = 'new_name'

0

来自BeautifulSoup文档

from BeautifulSoup import BeautifulSoup, Tag
soup = BeautifulSoup("<h2 class="someclass">TEXTHERE</h2>")
tag = Tag(soup, "h1", [("class", "someclass")])
tag.insert(0, "TEXTHERE")
soup.h2.replaceWith(tag)
print soup
# <h1 class="someclass">TEXTHERE</h1>

我认为这将删除h2标签的所有内容。我只想替换标签名称并保留其他所有内容不变。 - daphshez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接