美丽的汤解析内联<div>和<p>到字典

时间:2017-03-10 19:41:32

标签: python beautifulsoup

我正在解析一个非常讨厌的网站。基本上,内联div(它是'标题)和下面的段落标签(不是在div中),理论上是'儿童'...我想将其转换为字典。我无法找到最佳方法。这大致是网站的样子:

<div><span>This should be dict key1</span></div>
<p>This should be the value of key1</p>
<div><span>This should be dict key2</span></div>
<p>This should be the value of key2</p>

因此,理论上(和不正确地),python代码会像这样......

import bs4 as bs   

dict = {"Key" : "Value"}


soup = bs.BeautifulSoup(source,'lxml')
for item in soup:
    if item.tag == "div":
        dict['key'] = item.text
        if item.tag == "p":
            dict['value'] = item.text

然而不知何故,一旦找到下一个<div>,它就需要中断并开始一个新的键值。我很难缠绕这个......帮助!

更新 建议的解决方案非常有效。

1 个答案:

答案 0 :(得分:2)

您可以首先查找所有div,然后循环显示div列表,为每个div查找其下一个兄弟标记p的文本,为{{添加更多属性约束1}}功能,以确保它到达你想要的地方:

find_all

更新:如果{div.get_text(): div.findNextSibling('p').get_text() for div in soup.find_all("div")} #{'This should be dict key1': 'This should be the value of key1', # 'This should be dict key2': 'This should be the value of key2'} 后面有多个p标记,则只需循环遍历所有div并查找所有div s,直到下一个{{ 1}}并将它们作为值添加到上一个键,这里使用p来简化逻辑:

div

使用Html

defaultdict