Beautiful Soup解析内联<div>和<p>到字典中

2024-05-02 07:28:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在分析一个非常讨厌的网站。基本上,有内联div(它们是“headers”)和下面的段落标记(不在div中),它们理论上是“children”。。。我想把这个换成字典。我想不出最好的办法。网站大致如下:

<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代码应该是这样的。。。在

^{pr2}$

但不知何故,一旦找到下一个<div>,它就需要中断,并开始一个新的键值。我很难在这件事上绞尽脑汁。。。救命啊!在

更新 建议的解决方案效果很好。在


Tags: ofthedivvalue网站be理论this
1条回答
网友
1楼 · 发布于 2024-05-02 07:28:41

首先可以找到所有的div,然后遍历div列表,对于每个div找到其下一个同级标记p的文本,向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'}

Update:如果在div后面有多个p标记,那么只需遍历所有div并找出所有的p直到下一个div并将它们作为值添加到上一个键,这里使用defaultdict稍微简化了逻辑:

^{pr2}$

使用的Html:

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

相关问题 更多 >