如何在Python中将HTML解析为字符串模板?

时间:2015-01-23 08:09:18

标签: python html parsing beautifulsoup html-parsing

我想解析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>

1 个答案:

答案 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())