使用BeautifulSoup选择所有div兄弟

时间:2015-01-07 19:12:38

标签: python html css beautifulsoup

我有一个html文件,其结构如下:

<div>
</div

<div>
</div>

<div>
  <div>
  </div>
  <div>
  </div>
  <div>
  </div>
<div>

<div>
  <div>
  </div>
</div>

我想在第三和第四个块中选择所有siblings div而不选择嵌套div。如果我使用find_all(),我会获得所有div。

1 个答案:

答案 0 :(得分:3)

您可以找到父元素的直接子元素:

soup.select('body > div')

获取顶级div标记下的所有body元素。

您还可以找到第一个 div,然后使用Element.find_next_siblings()抓住所有匹配的兄弟姐妹:

first_div = soup.find('div')
all_divs = [first_div] + first_div.find_next_siblings('div')

或者你可以使用element.children generator并过滤那些:

all_divs = (elem for elem in top_level.children if getattr(elem, 'name', None) == 'div')

其中top_level是直接包含这些div元素的元素。

相关问题