Python 按文档中的顺序对HTML元素进行分组
我有一个类似以下内容的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 </
<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']}