我想解析 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>
最佳答案
BeautifulSoup
可以处理这种情况:
- 查找所有具有
x-attrsite
属性的div
元素,删除该属性并添加值为None 的
(生成一个没有值的属性){attrsite}
属性 - 查找所有具有
x-inner
属性的div
元素并使用replace_with()
将元素替换为文本{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())
打印:
<div class="x,y,z" {attrsite}>
{inner}
<div>
{inner}
</div>
</div>
关于python - 如何在Python中将HTML解析为字符串模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28105536/