Python 按文档中的顺序对HTML元素进行分组

Python 按文档中的顺序对HTML元素进行分组,python,Python,我有一个类似以下内容的HTML文档: <div class = "Group"> Group 1 </div> <div class = "item"> Item 1 </div> <div class = "Group"> Group 2 </div> <div class = "item"> Item 2 </div> <div class = "item"> Item 3 </

我有一个类似以下内容的HTML文档:

<div class = "Group"> Group 1 </div>
<div class = "item"> Item 1 </div>
<div class = "Group"> Group 2 </div>
<div class = "item"> Item 2 </div>
<div class = "item"> Item 3 </div>

通常这很容易做到,但我不确定在元素嵌套不准确时如何处理。相反,我只需要选择出现在元素下面的HTML,但不知道如何做。

虽然可以使用
re
或其他方法来完成,但HTML解析需要一个合适的库。
使用bs4:

from bs4 import BeautifulSoup

html = '''
<div class = "Group"> Group 1 </div>
<div class = "item"> Item 1 </div>
<div class = "Group"> Group 2 </div>
<div class = "item"> Item 2 </div>
<div class = "item"> Item 3 </div>
'''

soup = BeautifulSoup(html, 'lxml')
data = {}
key = None
for i in soup.find_all('div'):
    if 'Group' in i.get('class'):
        key = i.text.strip()
        data[key] = []
    elif key:
        data[key].append(i.text.strip())

print(data)

虽然可以使用
re
或其他方法进行html解析,但html解析需要合适的库。
使用bs4:

from bs4 import BeautifulSoup

html = '''
<div class = "Group"> Group 1 </div>
<div class = "item"> Item 1 </div>
<div class = "Group"> Group 2 </div>
<div class = "item"> Item 2 </div>
<div class = "item"> Item 3 </div>
'''

soup = BeautifulSoup(html, 'lxml')
data = {}
key = None
for i in soup.find_all('div'):
    if 'Group' in i.get('class'):
        key = i.text.strip()
        data[key] = []
    elif key:
        data[key].append(i.text.strip())

print(data)

您可以逐个获取元素,如果它是
,则保存旧列表并创建新列表,如果它是
,则添加到列表。开始时,“旧列表”可以是
None
。您可以逐个获取元素,如果是
Group
,则保存旧列表并创建新列表,如果是
,则添加到列表中。开始时,“旧列表”可以是
None
{'Group 2': ['Item 2', 'Item 3'], 'Group 1': ['Item 1']}