按文档

时间:2017-12-07 23:36:44

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

我想创建属于组组元素的每个项目的列表:

Group 1: [Item 1]
Group 2: [Item 2, Item 3]

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

1 个答案:

答案 0 :(得分:2)

尽管可以使用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)
{'Group 2': ['Item 2', 'Item 3'], 'Group 1': ['Item 1']}