Delightful Soup est une bibliothèque Python qui permet d’extraire des informations des enregistrements HTML et XML. Elle fonctionne avec votre analyseur préféré pour vous donner des méthodes informelles d’exploration, de recherche et de modification de l’arbre d’analyse. Elle permet régulièrement aux ingénieurs logiciels de gagner des heures ou de longues heures de travail.

Ces lignes directrices représentent chaque élément significatif de l’Excellent Soup 4, avec des modèles. Je vous donne ce à quoi elle sert, comment elle fonctionne, comment l’utiliser, comment la faire faire ce dont vous avez besoin, et ce qu’il faut faire quand elle nuit à vos désirs.

Les modèles de cette documentation devraient fonctionner de la même manière en Python 2.7 et Python 3.2.

Vous recherchez peut-être la documentation relative à Lovely Soup 3. Si c’est le cas, vous devez savoir que la Soupe Merveilleuse 3 n’est plus jamais créée et que la Soupe Excellente 4 est prescrite pour chaque nouvelle entreprise. Si vous souhaitez connaître les contrastes entre Excellent Soup 3 et Wonderful Soup 4, consultez le code de portage sur BS4.

Cette documentation a été convertie en différents dialectes par les clients de Wonderful Soup :

Ce document est bien sûr également disponible en chinois.

Cette page est disponible en japonais (lien externe)

이 문서는 한국어 번역도 가능합니다. (외부 링크)

un document HTML qui sera utilisé comme exemple tout au long de ce document. Il s’agit d’une partie de l’histoire d’Alice au pays des merveilles :

html_doc = “””

<html><head><title>The Dormouse’s story</title></head>

<corps>

<p class=”title”><b>L’histoire de The Dormouse</b></p>

<p class=”story”>Il était une fois trois petites soeurs ; et elles s’appelaient

<a href=”http://example.com/elsie” class=”sister” id=”link1″>Elsie</a>,

<a href=”http://example.com/lacie” class=”sister” id=”link2″>Lacie</a> et

<a href=”http://example.com/tillie” class=”sister” id=”link3″>Tillie</a> ;

et ils vivaient au fond d’un puits.</p>

<p class=”story”>…</p>

“””

En passant le document des “trois sœurs” dans Beautiful Soup, on obtient un objet BeautifulSoup, qui représente le document comme une structure de données imbriquée :

de bs4 import BeautifulSoup

soupe = BeautifulSoup(html_doc, ‘html.parser’)

print(soup.prettify())

# <html>

# <head>

# <titre>

# L’histoire de The Dormouse

# </titre>

# </head>

# <corps>

# <p class=”title”>

#    <b>

# L’histoire de The Dormouse

#    </b>

#   </p>

# <p class=”story”>

# Il était une fois trois petites soeurs, et elles s’appelaient

# <a class=”sister” href=”http://example.com/elsie” id=”link1″>

# Elsie

#    </a>

#    ,

# <a class=”sister” href=”http://example.com/lacie” id=”link2″>

# Lacie

#    </a>

# et

# <a class=”sister” href=”http://example.com/tillie” id=”link2″>

# Tillie

#    </a>

# ; et ils vivaient au fond d’un puits.

#   </p>

# <p class=”story”>

#    …

#   </p>

# </corps>

# </html>

Voici quelques moyens simples de naviguer dans cette structure de données :

soup.title

<titre>L’histoire du Loir</titre>

soup.title.name

# u “titre

soup.title.string

# u “L’histoire du Loir

soup.titre.parent.nom

# u ‘tête

soup.p

# <p class=”title”><b>L’histoire du Loir</b></p>

soup.p [“classe”].

# u “titre

soup.a

# <a class=”sister” href=”http://example.com/elsie” id=”link1″>Elsie</a>

soup.find_all(‘a’)

# [<a class=”sister” href=”http://example.com/elsie” id=”link1″>Elsie</a>,

# <a class=”sister” href=”http://example.com/lacie” id=”link2″>Lacie</a>,

# <a class=”sister” href=”http://example.com/tillie” id=”link3″>Tillie</a>]

soup.find(id=”link3″)

# <a class=”sister” href=”http://example.com/tillie” id=”link3″>Tillie</a>

Une tâche commune consiste à extraire toutes les URL trouvées dans les balises <a> d’une page :

pour le lien dans soup.find_all(‘a’) :

    print(link.get(‘href’))

# http://example.com/elsie

# http://example.com/lacie

# http://example.com/tillie

Une autre tâche courante consiste à extraire tout le texte d’une page :

print(soup.get_text())

# L’histoire de The Dormouse

#

# L’histoire de The Dormouse

#

# Il était une fois trois petites soeurs, et elles s’appelaient

# Elsie,

# Lacie et

# Tillie ;

# et ils vivaient au fond d’un puits.

#

# …

Installer une belle soupe

Si vous utilisez une forme continue de Debian ou Ubuntu Linux, vous pouvez introduire Delightful Soup avec le gestionnaire de paquets du système :

$ able get introduce python-bs4 (pour Python 2)

$ adept get introduce python3-bs4 (pour Python 3)

Wonderful Soup 4 est distribué par PyPi, donc dans le cas où vous ne pouvez pas l’introduire avec le packager du système, vous pouvez l’introduire avec easy_install ou pip. Le nom du bundle est beautifulsoup4, et un bundle similaire concerne Python 2 et Python 3. Assurez-vous que vous utilisez le rendu correct de pip ou easy_install pour votre formulaire Python (ceux-ci peuvent être nommés pip3 et easy_install3 séparément au cas où vous utiliseriez Python 3).

$ easy_install beautifulsoup4

$ pip présenter beautifulsoup4

(Le paquet BeautifulSoup n’est probablement pas ce dont vous avez besoin. C’est la dernière décharge importante, ExcellenteSoupe 3. Une grande partie de la programmation utilise le BS3, il est donc encore accessible, cependant au cas où vous composeriez un nouveau code, vous devriez introduire le beautifulsoup4).

Si par hasard vous n’avez pas easy_install ou pip introduit, vous pouvez télécharger le tarball source de Delightful Soup 4 et l’introduire avec setup.py.

$ python setup.py introduire

En dernier recours, l’autorisation pour Delightful Soup vous permet de regrouper toute la bibliothèque avec votre demande. Vous pouvez télécharger le tarball, dupliquer son catalogue bs4 dans la base de code de votre application et utiliser Delightful Soup sans l’introduire par aucun moyen.

J’utilise Python 2.7 et Python 3.2 pour créer Delightful Soup, mais cela devrait fonctionner avec d’autres formes en cours.

Questions après la création

Excellent Soup est fourni sous forme de code Python 2. Au moment où vous l’introduisez pour l’utiliser avec Python 3, il est donc passé en code Python 3. Si par hasard vous n’introduisez pas le paquet, le code ne sera pas modifié. De même, des rapports sur des machines Windows ont fait état de l’introduction d’une adaptation inappropriée.

Si par hasard vous obtenez l’erreur ImportError “No module named HTMLParser”, votre souci est que vous exécutez l’adaptation du code en Python 2 sous Python 3.

Dans le cas où vous obtenez l’erreur ImportError “No module named html.parser”, votre souci est que vous exécutez la forme Python 3 du code sous Python 2.

Dans les deux cas, votre option la plus solide est d’expulser totalement l’établissement Lovely Soup de votre système (en comptant tout indice réalisé lorsque vous avez détaché la goulette) et de tenter à nouveau l’établissement.

Si par hasard vous obtenez l’erreur de syntaxe “Structure de phrase invalide” en attente ROOT_TAG_NAME = u'[document]’, vous devez changer le code Python 2 pour Python 3. Vous pouvez le faire soit en introduisant le bundle :

$ python3 setup.py introduire

ou encore en exécutant physiquement le contenu de la transformation 2to3 de Python sur le registre bs4 :

2à3-3,2$ – w bs4