我正在研究HTML Cleaner / Modifier但是在尝试将元素的标记从“p”更改为“li”时遇到了问题。我正在通过正则表达式函数“re.compile”在HTML输入中搜索具有特定字符串内容的行。我能够事先清除不需要的标签和标签属性,但我无法将标签名称更改为我指定的其他标签。
示例输入(我将同时使用多行HTML文本):
<p align="left">Extra string text<strong><span style="font-family: Arial,Arial; font-size: 10px; color: #343d47;">FOO:</span></strong> <span style="font-family: Arial,Arial; font-size: 10px; color: #343d47;">Additional extra string text</span></p>
<p align="left">Extra string text<strong><span style="font-family: Arial,Arial; font-size: 10px; color: #343d47;">BAR:</span></strong> <span style="font-family: Arial,Arial; font-size: 10px; color: #343d47;">Additional extra string text</span></p>
这是我的代码“清理”HTML:
from bs4 import BeautifulSoup
import re
inputdata = input("")
soup = BeautifulSoup(inputdata, "html.parser")
def cleaner(soup):
for p_tag in soup.find_all("p"):
del p_tag["align"]
for span_tag in soup.find_all("span"):
span_tag.unwrap()
for li in soup.find_all("p", string=re.compile("FOO:")):
li.name = "li"
return soup
print(cleaner(soup))
我希望代码输出如下所示:
<li>Extra string text<strong>FOO:</strong> Additional extra string text</li>
<p>Extra string text<strong>BAR:</strong> Additional extra string text</p>
但它却没有将“p”标签更改为“li”标签。像这样:
<p>Extra string text<strong>FOO:</strong> Additional extra string text</p>
<p>Extra string text<strong>BAR:</strong> Additional extra string text</p>
它基本上忽略了我创建的代码行,并致力于使用“FOO:”字符串内容更改“p”标记。知道为什么我的“for”循环不能正常工作吗?