有没有办法用 Python 解析 html 标签?
Is there a way to parse html tags with Python?
我需要解析几个 HTML 标签。
示例:
我需要转:
<div class="title">
<h1> Hello World </h1>
</div>
进入
['<div class="title">', '<h1> Hello World </h1>', '</div>']
您可以使用拆分方式 ('><')
并再次将“><”添加到列表
中的字符串
您可以使用递归生成器函数 BeautifulSoup
:
import bs4
from bs4 import BeautifulSoup as soup
s = """
<div class="title">
<h1> Hello World </h1>
</div>
"""
def get_tags(d):
ats = " ".join(a+"="+f'"{(b if not isinstance(b, list) else " ".join(b))}"' for a, b in d.attrs.items())
h = f'<{d.name} {ats}>' if ats else f'<{d.name}>'
if (k:=[i for i in d.contents if isinstance(i, bs4.element.Tag)]):
yield h
yield from [j for l in k for j in get_tags(l)]
yield f'</{d.name}>'
else:
yield f'{h}{d.text}</{d.name}>'
print(list(get_tags(soup(s, 'html.parser').contents[1])))
输出:
['<div class="title">', '<h1> Hello World </h1>', '</div>']
我需要解析几个 HTML 标签。
示例: 我需要转:
<div class="title">
<h1> Hello World </h1>
</div>
进入
['<div class="title">', '<h1> Hello World </h1>', '</div>']
您可以使用拆分方式 ('><')
并再次将“><”添加到列表
中的字符串您可以使用递归生成器函数 BeautifulSoup
:
import bs4
from bs4 import BeautifulSoup as soup
s = """
<div class="title">
<h1> Hello World </h1>
</div>
"""
def get_tags(d):
ats = " ".join(a+"="+f'"{(b if not isinstance(b, list) else " ".join(b))}"' for a, b in d.attrs.items())
h = f'<{d.name} {ats}>' if ats else f'<{d.name}>'
if (k:=[i for i in d.contents if isinstance(i, bs4.element.Tag)]):
yield h
yield from [j for l in k for j in get_tags(l)]
yield f'</{d.name}>'
else:
yield f'{h}{d.text}</{d.name}>'
print(list(get_tags(soup(s, 'html.parser').contents[1])))
输出:
['<div class="title">', '<h1> Hello World </h1>', '</div>']