Vous êtes sur la page 1sur 5

01/09/2021 Le package python Beautiful Soup — documentation Programmation Web pour la bio-informatique

Le package python Beautiful Soup


Le package requests permet de consulter et de manipuler la structure arborescente d’un document
HTML.

Installation
Depuis votre environnement virtuel, exécutez la commande suivante :

pip install beautifulsoup4

Si tout s’est bien passé, vous pouvez désormais importer le package dans l’interprétaur python :

>>> import bs4

>>> bs4.__version__

'4.7.1'

(le numéro de version peut évidemment être différent).

Premiers pas
La classe  bs4.BeautifulSoup  permet de créer un objet Python représentant un document HTML.
Une manière de créer un tel objet est de passer simplement le code HTML (une chaîne de
caractères ou d’octets) :

>>> import bs4

>>> doc = bs4.BeautifulSoup("""

... <ul>

... <li>Premier élément</li>

... <li>Deuxième <em>élément</em></li>

... <li><a href="toto">Un lien</a></li>

... </ul>

... <p>Un autre <a href="tata">lien</a>.</p>

... """)

Inspecter le document

Cet objet possède une méthode  select  qui prend en paramètre un sélecteur CSS, et retourne la
liste des éléments HTML vérifiant ce sélecteur :

https://perso.liris.cnrs.fr/pierre-antoine.champin/2019/progweb-python/annexes/a3_beautiful_soup.html 1/3
01/09/2021 Le package python Beautiful Soup — documentation Programmation Web pour la bio-informatique

>>> doc.select('li')

[<li>Premier élément</li>, <li>Deuxième <em>élément</em></li>, <li><a href="toto">Un lien</a></li>]

>>> doc.select('a')

[<a href="toto">Un lien</a>, <a href="tata">lien</a>]

>>> doc.select('p *')

[<a href="tata">lien</a>]

On peut également accéder au premier élément d’un type donné, en utilisant le nom de balise
comme attribut de l’objet document :

>>> doc.li

<li>Premier élément</li>

>>> doc.a

<a href="toto">Un lien</a>

>>> doc.p

<p>Un autre <a href="tata">lien</a>.</p>

Attributs d’un élément

Chaque élément récupéré par les méthodes ci-dessus possède les attributs suivants :

name  : le nom de la balise ;


contents : la liste des “enfants” de cet élément (peuvent être des chaînes de caractères ou
d’autres éléments) ;
string  : le texte contenu dans cet élément (ou  None  si l’élément a plusieurs enfants) ;
la notation  [a]  peut également être utilisée pour accéder aux attributs HTML de cet élément.

Exemples :

>>> doc.p.contents

['Un autre ', <a href="tata">lien</a>, '.']

>>> doc.p.contents[1].name

'a'

>>> doc.p.contents[1]['href']

'tata'

>>> doc.p.contents[1].string

'lien'

Homogénéité

L’objet document et les objets éléments sont en fait homogènes entre eux. Ils possèdent les
mêmes attributs et méthodes.

On peut notamment utiliser la méthode  select  sur un élément, ou un attribut ayant le nom d’une
balise, pour rechercher à l’intérieur de cet élément :
https://perso.liris.cnrs.fr/pierre-antoine.champin/2019/progweb-python/annexes/a3_beautiful_soup.html 2/3
01/09/2021 Le package python Beautiful Soup — documentation Programmation Web pour la bio-informatique

>>> doc.ul.select('a')

[<a href="toto">Un lien</a>]

>>> doc.ul.li

<li>Premier élément</li>

Les chaînes de caractère retournées par  string  ou  contents  sont également partielement
homogènes à des éléments. Elles possèdent notamment un attribut  name (qui vaut toujours  None )
et un attribut  string  (qui retourne la chaîne elle-même). En revanche, elle n’ont pas
d’attribut  contents . Cette homogénéité facilite toutefois le traitement systématique des valeurs
retournées par l’attribut  contents  d’un élément :

>>> def full_text(e):

... if e.string:

... return e.string

... else:

... return "".join(full_text(i) for i in e.contents)

...

>>> full_text(doc)

'\nPremier élément\nDeuxième élément\nUn lien\n\nUn autre lien.\n'

https://perso.liris.cnrs.fr/pierre-antoine.champin/2019/progweb-python/annexes/a3_beautiful_soup.html 3/3
01/09/2021 Connexion à une base de données — documentation Programmation Web pour la bio-informatique

Connexion à une base de données


Référez vous à l’introduction de la documentation du module  sqlite3 , dans la bibliothèque
standard de Python :

https://docs.python.org/fr/3.6/library/sqlite3.html

Bonne pratique pour la méthode  close


Note

Ce qui suit est valable pour de nombreux types d’objets ayant une méthode  close ou
équivalente, pas uniquement pour les connexions à une base de données.

Il est important de fermer la connexion quoi qu’il arrive, y compris si une exception est levée. C’est
pourquoi il faut normalement appeler la méthode  close  dans la clause  finally` d'un bloc ``try  :

conn = sqlite3.connect('example.db')

try:

c = conn.cursor()

c.execute("INSERT INTO stocks VALUES ('2006-01-05','BUY','RHAT',100,35.14)")

conn.commit()

finally:

conn.close()

Une autre manière consiste à utiliser la clause  with  de python, et la


fonction  contextlib.closing  qui garantira l’appel à  close  :

from contextlib import closing

with closing(sqlite3.connect('example.db')) as conn:


c = conn.cursor()

c.execute("INSERT INTO stocks VALUES ('2006-01-05','BUY','RHAT',100,35.14)")

conn.commit()

Note

De plus en plus d’objets en Python supportent nativement la clause  with  ; dans ce cas, il n’est
pas nécessaire d’encapsuler l’appel avec  closing(...) . C’est notamment le cas de l’objet
retourné par  sqlite3.connect .

On pourrait donc écrire encore plus simplement :

https://perso.liris.cnrs.fr/pierre-antoine.champin/2019/progweb-python/annexes/a4_dbapi.html 1/2
01/09/2021 Connexion à une base de données — documentation Programmation Web pour la bio-informatique

with sqlite3.connect('example.db') as conn:

c = conn.cursor()

c.execute("INSERT INTO stocks VALUES ('2006-01-05','BUY','RHAT',100,35.14)")

conn.commit()

Cependant, la PEP 249 n’impose pas ce support de la clause  with , donc si on souhaite


garantir la compatibilité avec d’autres types de bases de données, il est préférable de garder
l’appel explicite à  closing(...) .

https://perso.liris.cnrs.fr/pierre-antoine.champin/2019/progweb-python/annexes/a4_dbapi.html 2/2

Vous aimerez peut-être aussi