将 <strong> 标签替换为 h2 标签

Replace <strong> tag with h2 tag

我正在尝试编写一些 BeautifulSoup 代码,它将获取被标签包围的每段文本并将标签更改为标签 - 但是,只有当它只是一行而没有其他 written/output 文字.

这可能吗?

至此

但这将保持不变:

我知道下面的内容可以改变所有的强者。我怎样才能只得到重要的?

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('strong')
    h2.name = 'h1'
    print soup

您可以找到所有 strong 个元素并检查 .parent 的长度:

from bs4 import BeautifulSoup

data = """
<html>
<p><strong>Like this</strong></p>
<p>Hello, <strong>world</strong>
</html>
"""

soup = BeautifulSoup(data)
for strong in soup.find_all('strong'):
    if len(strong.parent) == 1:
        strong.name = 'h1'
print soup

打印(看到第一个 strong 标签被替换,第二个没有):

<html>
<body>
    <p><h1>Like this</h1></p>
    <p>Hello, <strong>world</strong></p>
</body>
</html>

或者,更简洁的形式:

for strong in soup.find_all('strong', lambda x: x and len(x.parent) == 1):
    strong.name = 'h1'

作为旁注,您正在使用 BeautifulSoup3 which is no longer maintained; consider upgrading to BeautifulSoup4:

pip install beautifulsoup4

erm...这可能效率不高,但写起来肯定更简单:

data = data.replace('<p><strong>', '<p><h2>')
data = data.replace('</strong></p>', '</h2></p>')

还是我误解了 str.replace() 的一些基本知识?

虽然这不是很复杂,但如果 html 是一致的

就可以完成工作

编辑:使用正则表达式的更复杂的解决方案:

import re

data = re.sub(r'<[Pp]>[\s]*<[Ss][Tt][Rr][Oo][Nn][Gg]>', '<p><h2>', data)
data = re.sub(r'</[Ss][Tt][Rr][Oo][Nn][Gg]>[\s]*</[Pp]>', '</h2></p>', data)