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

标签 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>

最佳答案

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/

相关文章:

java - 为什么我在解析 JSON 时得到 NULL 值

python - 我如何忽略服务器响应以节省带宽?

jquery - 无法更改按钮大小

android - html5/android 触摸取消

jquery - 通过浏览器扩展添加表值

Android SOAP解析xml Listview

python - 将 Pandas 中的行合并为一长行

python - 如何使用 curl 或请求捕获重定向

从 mysql 表中选择记录的 Python 函数

HTML 最小宽度有效,最大宽度无效