Certaines balises
ont une balise
et une balise
, mais je ne veux que celles
balise qui n'a pas de balises frères et sœurs, juste le contenu.
<p> <img src="any url"/> </p> <p> hello world </p>
Je veux une balise
qui n'a pas de Balise
utilisant une belle soupe
4 Réponses :
from bs4 import BeautifulSoup txt = """ <p> <img src="any url"/> </p> <p> hello world </p> """ soup = BeautifulSoup(txt) for node in soup.findAll('p'): print(' '.join(node.findAll(text=True, recursive = False))) OUTPUT: hello world
Cela obtiendra tout le texte des éléments
mais ne l'obtiendra d'aucun des éléments enfants dans le
. Récursif doit être égal à false sinon il examinera les éléments enfants. J'ai ajouté dans un autre cas de test pour vous montrer ceci: Heading
from bs4 import BeautifulSoup html = "<p> <img src='any url'/> </p> <p><h4>Heading</h4></p> <p> hello world </p>" soup = BeautifulSoup(html) for element in soup.findAll('p'): print("".join(element.findAll(text=True, recursive=False)))
Une solution pour obtenir toutes les balises p
sans balises enfants.
[<p> hello world </p>]
Sortie
import bs4 html="""<p> <img src="any url"/> </p> <p> hello world </p>""" soup=bs4.BeautifulSoup(html,"html.parser") def has_no_tag_children(tag): if type(tag) is bs4.element.Tag: #check if tag if tag.name =='p': #check if it is p tag if bs4.element.Tag not in [type(child) for child in tag.children]: # check if has any tag children return True return False kids=soup.find_all(has_no_tag_children) print(kids)
En supposant que BeautifulSoup 4.7+, vous devriez pouvoir faire ceci:
import bs4 html="""<p> <img src="any url"/> </p> <p> hello world </p>""" soup=bs4.BeautifulSoup(html,"html.parser") kids=soup.select("p:not(:has(*))") print(kids)
pouvez-vous nous donner un exemple ... ou l'URL pour que nous comprenions ce que vous voulez dire ??
Quelle est la hiérarchie html? Ce serait mieux si vous pouviez modifier et ajouter les balises.
@ K163897 Muhammad Nafees est-ce que l'une des réponses ci-dessous a aidé à résoudre votre problème? Si oui, vous pouvez marquer celui que vous souhaitez, merci!