将 <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)
我正在尝试编写一些 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)