2017-01-18 3 views
0

Я пытаюсь выбрать тег h1, имеющий следующий элемент как p, используя метод find_all(), но я получаю пустой список. Вот мой код,Выбор тегов, исходящих из двух последовательных тегов с помощью beautifulsoup

def has_h1_followedby_p(tag): 
    return tag.name == 'h1' and tag.next_siblings.name == 'p' 

soup = BeautifulSoup(open(filepath), 'html.parser') 
h1_tags = soup.find_all(has_h1_followedby_p) 

Я хочу знать, что именно не так с условием, поскольку оно кажется достаточно простым. Я буду очень благодарен за любое предложение.

ответ

2

next_siblings является генератор, который будет соответствовать всем следующие братья и сестры, в то время как вам нужно один одно:

tag.name == 'h1' and tag.next_sibling and tag.next_sibling.name == "p" 

Обратите внимание, что мы дополнительно применять проверку tag.next_sibling truthiness - может быть ситуация, когда h1 не имеет следующего брата.

Или вы можете искать p следующего собрата (это не то же самое, как и предыдущие версии, хотя):

tag.name == 'h1' and tag.find_next_sibling("p") 
+0

Благодаря alecxe для такого активного ответа, он работал как шарм. –

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