我想解析HTML并将它们转换为字符串模板。在下面的示例中,我查找了标有x-inner
的元素,它们在最终字符串中成为模板占位符。此外x-attrsite
也成为模板占位符(当然使用不同的命令)。
输入:
<div class="x,y,z" x-attrsite>
<div x-inner></div>
<div>
<div x-inner></div>
</div>
</div>
期望的输出:
<div class="x,y,z" {attrsite}>{inner}<div>{inner}</div></div>
我知道有HTMLParser和BeautifulSoup,但我对如何在x-*
标记之前和之后提取字符串感到茫然,并且为了模板化而逃避这些字符串。
现有花括号处理得很清楚,如下例所示:
<div x-maybe-highlighted> The template string "there are {n} message{suffix}" can be used.</div>
答案 0 :(得分:2)
BeautifulSoup
可以处理此案例:
div
属性的所有x-attrsite
元素,删除该属性并添加值为{attrsite}
的{{1}}属性(生成没有值的属性)None
属性的所有div
元素,并使用replace_with()
将文字替换为x-inner
实现:
{inner}
打印:
from bs4 import BeautifulSoup
data = """
<div class="x,y,z" x-attrsite>
<div x-inner></div>
<div>
<div x-inner></div>
</div>
</div>
"""
soup = BeautifulSoup(data, 'html.parser')
for div in soup.find_all('div', {'x-attrsite': True}):
del div['x-attrsite']
div['{attrsite}'] = None
for div in soup.find_all('div', {'x-inner': True}):
div.replace_with('{inner}')
print(soup.prettify())