Mis a jour le 2025-04-14, 12:10

Beautiful Soup pour le parsing HTML

Beautiful Soup : package pour parser facilement, avec un parseur de type DOM, un document html, même mal formé (pas forcément XHTML).
Utilisation du package : from bs4 import BeautifulSoup.
Construction de l'objet :
  • à partir du texte : text = '<html><body><div class="myList" id="myId"><ul>Une liste :<li>item1</li><li>item2</li></ul></div><div>un autre paragraphe.</div></body></html>'; doc = BeautifulSoup(text, 'html.parser')
  • ou sinon, à partir d'un filehandle : doc = BeautifulSoup(fh, 'html.parser').
Accès aux éléments :
  • document.find_all('div') : renvoie un ResultSet (bs4.element.ResultSet) de toutes les div du document. On peut alors boucler sur chaque élément (qui est de type bs4.element.Tag) :
    for elt in document.find_all('div'):
      print(elt)	
        
  • document.find_all('div', attrs = {'class': 'pad10'}) : renvoie les div qui ont comme attribut class avec la valeur pad10
  • doc.div : le premier élément div du document (objet bs4.element.Tag), ici <div class="myList" id="myId"><ul>Une liste :<li>item1</li><li>item2</li></ul></div>.
  • doc.div.li : le premier élément li du premier élément div, ici <li>item1</li>.
  • sur l'élément ramené, on peut appliquer les mêmes principes : myUl = doc.div.ul; myUl.li donne ici <li>item1</li>.
  • doc.div.li.string : le contenu d'un élément, ici item1
  • doc.li.parent : le parent du premier élément li, ici <ul>Une liste :<li>item1</li><li>item2</li></ul>
  • doc.li.parent.name : le nom de l'élément, ici ul.
  • doc.div.attrs : les attributs d'un élément, ici {u'class': [u'myList']}.
  • doc.div['class'] : un attribut d'un élément, ici [u'myList'].
  • doc.div['id'] : un attribut d'un élément qui ne peut prendre qu'une seule valeur, ici 'myId'.
  • doc.find_all('li') : tous les li d'un document, ici [<li>item1</li>, <li>item2</li>]
  • doc.div.ul.contents : les sous-éléments d'un élément donné qui peuvent être à la fois du texte et des éléments, ici [u'Une liste :', <li>item1</li>, <li>item2</li>].
  • doc.div.next_sibling : l'élément frère juste après, ici <div>un autre <b>paragraphe</b>.</div> (pareil avec previous_sibling)
  • doc.select('div.myList li') : select css qui permet de faire à peu près toutes les sélections qu'on ferait avec CSS, renvoie ici [<li>item1</li>, <li>item2</li>].
  • myTag.getText() : renvoie le texte contenu dans l'élément

Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert