我正在解析一个非常讨厌的网站。基本上,内联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>
,它就需要中断并开始一个新的键值。我很难缠绕这个......帮助!
更新 建议的解决方案非常有效。
答案 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