2015-01-07 2 views
0

У меня есть HTML-файл, который имеет структуру, подобную следующей:Выбрать все Div братьев и сестер с помощью BeautifulSoup

<div> 
</div 

<div> 
</div> 

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

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

Я хотел бы, чтобы выбрать все братья и сестры DIV без выбора вложенных DIV в третьем и четвертом блоке. Если я использую find_all(), я получаю все div.

ответ

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.

Смежные вопросы