Как я могу получить весь текст после определенного элемента с помощью BeautifulSoup?

#html #web-scraping #beautifulsoup

Вопрос:

У меня есть приведенный ниже HTML (усеченный):

 <p>
 Quant à Madame O., si elle a retrouvé un emploi depuis juin 2016 lui permettant de percevoir un salaire mensuel net de 1.780,50 euros (pièce 38 de l'intimée)...
</p>
<div class="faits">
 <p>
  Sur la résidence habituelle des enfants communs et les droits de visite et d'hébergement
 </p>
</div>
<p>
 Les mesures d'investigation réalisées, aussi bien l'enquête sociale que l'expertise psychologique familiale…
 <div class="motifs">
  La Cour observe en outre que le juge des enfants de Toulon, dans sa dernière décision en date du 31 octobre 2016 (pièce 85 de l'appelant) a ordonné, en l'absence de situation de danger, un non lieu à assistance éducative.
 </div>
 <div class="motifs">
  Il est confirmé dans ce jugement que les enfants sont décrits comme spontanés, complices...
 </div>
</p>
<p>
 Par ailleurs il convient de maintenir le lien entre les enfants et leur père mais aussi d'adapter le droit de visite et d'hébergement de Monsieur Z. aux contraintes résultant de l'éloignement géographique entre les domiciles parentaux. La décision du premier juge sera donc confirmée sauf à préciser, par dispositions nouvelles, les points suivants :…
</p>
 

В документе у меня их несколько <div class="motifs"> , и цель состоит в том, чтобы получить весь текст после последнего <div class="motifs"> . Другими словами, я хочу получить весь текст, начиная с «Par ailleurs il convient…» до конца.

Я нашел последнего <div class="motifs"> таким образом:

last_marked = soup.find_all('div', {'class': 'motifs'})[-1]

И я получил правильный вывод из last_marked . Но как я могу получить весь текст, который появляется в HTML-файле после last_marked ?

Комментарии:

1. Вы хотите найти все теги <<p><p>> после последнего (<p>> last_marked )? Или вам нужна остальная часть всего HTML? Также last_marked находит текст, начинающийся с » Il est c..», а не «Par ailleurs il convient».

2. Пожалуйста, опубликуйте действительный html

Ответ №1:

Есть метод именно для этого, чтобы найти все теги после определенного элемента, используйте find_all_next() :

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

 soup = BeautifulSoup(html, "html.parser")
last_marked = soup.find_all('div', {'class': 'motifs'})[-1]

for tag in last_marked.find_all_next("p"):
    print(tag)
 

Комментарии:

1. Да, это хорошо сработало ! Большое спасибо.