web-dev-qa-db-fra.com

Obtenez toutes les balises HTML avec Beautiful Soup

J'essaie d'obtenir une liste de toutes les balises html de la belle soupe.

Je vois tout trouver mais je dois connaître le nom du tag avant de lancer une recherche.

S'il y a du texte comme

html = """<div>something</div>
<div>something else</div>
<div class='magical'>hi there</div>
<p>ok</p>"""

Comment pourrais-je obtenir une liste comme

list_of_tags = ["<div>", "<div>", "<div class='magical'>", "<p>"]

Je sais comment faire cela avec regex, mais j'essaie d'apprendre BS4

15
humanbeing

Vous n'avez pas besoin de spécifier d'arguments à find_all() - dans ce cas, BeautifulSoup vous trouverait chaque balise de l'arborescence, de manière récursive. Échantillon:

>>> from bs4 import BeautifulSoup
>>>
>>> html = """<div>something</div>
... <div>something else</div>
... <div class='magical'>hi there</div>
... <p>ok</p>"""
>>> soup = BeautifulSoup(html, "html.parser")
>>> [tag.name for tag in soup.find_all()]
[u'div', u'div', u'div', u'p']
>>> [str(tag) for tag in soup.find_all()]
['<div>something</div>', '<div>something else</div>', '<div class="magical">hi there</div>', '<p>ok</p>']
25
alecxe