Académique Documents
Professionnel Documents
Culture Documents
#beautifulso
up
Table des matières
À propos 1
Remarques 2
Versions 3
Examples 3
Installation ou configuration 3
Examples 6
Fonctions de filtrage 7
Utilisation de base 7
Crédits 11
À propos
You can share this PDF with anyone you feel could benefit from it, downloaded the latest version
from: beautifulsoup
It is an unofficial and free beautifulsoup ebook created for educational purposes. All the content is
extracted from Stack Overflow Documentation, which is written by many hardworking individuals at
Stack Overflow. It is neither affiliated with Stack Overflow nor official beautifulsoup.
The content is released under Creative Commons BY-SA, and the list of contributors to each
chapter are provided in the credits section at the end of this book. Images may be copyright of
their respective owners unless otherwise specified. All trademarks and registered trademarks are
the property of their respective company owners.
Use the content presented in this book at your own risk; it is not guaranteed to be correct nor
accurate, please send your feedback and corrections to info@zzzprojects.com
https://riptutorial.com/fr/home 1
Chapitre 1: Commencer avec beautifulsoup
Remarques
Dans cette section, nous discutons de ce qu'est Beautiful Soup, de son utilisation et d'un bref
aperçu de son utilisation.
Beautiful Soup est une bibliothèque Python qui utilise votre analyseur html / xml pré-installé et
convertit la page Web / html / xml en une arborescence composée de balises, d’éléments,
d’attributs et de valeurs. Pour être plus précis, l’arbre est constitué de quatre types d’objets, Tag,
NavigableString, BeautifulSoup et Comment. Cet arbre peut ensuite être "interrogé" en utilisant les
méthodes / propriétés de l'objet BeautifulSoup créé à partir de la bibliothèque de l'analyseur.
1. Vous souhaiterez peut-être analyser une page Web pour déterminer le nombre de balises
trouvées, le nombre d'éléments de chaque balise détectés et leurs valeurs. Vous voudrez
peut-être les changer.
2. Vous souhaiterez peut-être déterminer les noms et les valeurs des éléments afin de pouvoir
les utiliser conjointement avec d'autres bibliothèques pour l'automatisation de pages Web,
telles que Selenium .
3. Vous pouvez souhaiter transférer / extraire des données affichées dans une page Web vers
d'autres formats, tels qu'un fichier CSV ou une base de données relationnelle telle que
SQLite ou mysql. Dans ce cas, la bibliothèque vous aide dans la première étape, à
comprendre la structure de la page Web, bien que vous utilisiez d'autres bibliothèques pour
effectuer l'acte de transfert.
4. Vous voudrez peut-être savoir combien d’éléments sont stylés avec un certain style CSS et
lesquels.
2. Ouvrez une page Web ou un texte HTML avec la bibliothèque BeautifulSoup en mentionnant
quel analyseur utiliser. Le résultat de cette étape est un objet BeautifulSoup. (Remarque: ce
nom d’analyseur mentionné doit être déjà installé dans le cadre de vos processus Python.
Par exemple, html.parser est un package intégré avec piles fourni avec Python. Vous
pouvez installer d’autres analyseurs tels que lxml ou html5lib .)
4. Utilisez le résultat de l'étape précédente pour faire ce que vous voulez en faire, en restant
https://riptutorial.com/fr/home 2
dans votre code Python. Vous pouvez également modifier les valeurs d'élément ou les
valeurs d'attribut dans l'objet d'arborescence. Les modifications n'affectent pas la source du
code html, mais vous pouvez appeler des méthodes de formatage de sortie (telles que
prettify ) pour créer une nouvelle sortie à partir de l'objet BeautifulSoup.
Méthodes couramment utilisées: Généralement, les méthodes .find et .find_all sont utilisées
pour rechercher l'arborescence, en donnant les arguments d'entrée.
Les arguments d'entrée sont les suivants: le nom de la balise recherchée, les noms des attributs
et d'autres arguments connexes. Ces arguments peuvent être présentés comme suit: une chaîne,
une expression régulière, une liste ou même une fonction.
Si vous avez besoin de filtrer l'arborescence avec une combinaison des critères ci-dessus, vous
pouvez également écrire une fonction qui a la valeur true ou false et rechercher par cette fonction.
Versions
Examples
Installation ou configuration
pip peut être utilisé pour installer BeautifulSoup. Pour installer la version 4 de BeautifulSoup,
exécutez la commande:
Sachez que le nom du package est beautifulsoup4 au lieu de beautifulsoup , ce dernier nom
signifie ancienne version, voir ancien beautifulsoup
https://riptutorial.com/fr/home 3
main_url = "https://fr.wikipedia.org/wiki/Hello_world"
req = requests.get(main_url)
soup = BeautifulSoup(req.text, "html.parser")
# Retrieving the side page links by "blocks" and storing them in a dictionary
side_page_blocks = soup.find("div",
id = "mw-panel").find_all("div",
class_ = "portal")
blocks_links = {}
for num, block in enumerate(side_page_blocks):
blocks_links[num] = [link.get("href") for link in block.find_all("a", href = True)]
print blocks_links[0]
Sortie:
Entrer votre analyseur préféré lors de l'instanciation de Beautiful Soup évite l' Warning habituel
déclarant no parser was explicitely specified .
Différentes méthodes peuvent être utilisées pour trouver un élément dans l'arborescence de la
page Web.
Bien qu'il existe quelques autres méthodes, les CSS classes et les CSS selectors sont deux moyens
pratiques de rechercher des éléments dans l'arborescence.
Il convient de noter que nous pouvons rechercher des balises en définissant leur valeur d'attribut
sur True lors de la recherche.
get_text()nous permet de récupérer du texte contenu dans une balise. Il le renvoie sous la forme
d'une chaîne Unicode unique. tag.get("attribute") permet d'obtenir la valeur d'un attribut de tag.
https://riptutorial.com/fr/home 4
https://riptutorial.com/fr/beautifulsoup/topic/1817/commencer-avec-beautifulsoup
https://riptutorial.com/fr/home 5
Chapitre 2: Éléments de localisation
Examples
Localiser un texte après un élément dans BeautifulSoup
<div>
<label>Name:</label>
John Smith
</div>
Dans ce cas, vous pouvez localiser l'élément label par texte, puis utiliser la propriété .next_sibling
:
data = """
<div>
<label>Name:</label>
John Smith
</div>
"""
BeautifulSoup a un support limité pour les sélecteurs CSS , mais couvre les plus couramment
utilisés. Utilisez la méthode select() pour rechercher plusieurs éléments et select_one() pour
rechercher un seul élément.
Exemple de base:
data = """
<ul>
<li class="item">item1</li>
<li class="item">item2</li>
<li class="item">item3</li>
</ul>
"""
https://riptutorial.com/fr/home 6
soup = BeautifulSoup(data, "html.parser")
Impressions:
item1
item2
item3
Pour localiser les commentaires dans BeautifulSoup , utilisez l'argument text (ou string dans les
versions récentes) vérifiant le type à Comment :
data = """
<html>
<body>
<div>
<!-- desired text -->
</div>
</body>
</html>
"""
Fonctions de filtrage
BeautifulSoup vous permet de filtrer les résultats en fournissant une fonction à find_all et à des
fonctions similaires. Cela peut être utile pour les filtres complexes ainsi que pour un outil de
réutilisation du code.
Utilisation de base
Définir une fonction qui prend un élément comme seul argument. La fonction doit retourner True si
l'argument correspond.
def has_href(tag):
'''Returns True for tags with a href attribute'''
return bool(tag.get("href"))
https://riptutorial.com/fr/home 7
soup.find_all(has_href) #find all elements with a href attribute
#equivilent using lambda:
soup.find_all(lambda tag: bool(tag.get("href")))
Un autre exemple qui trouve des balises avec une valeur href qui ne commence pas par
def present_in_href(check_string):
return lambda tag: tag.get("href") and check_string in tag.get("href")
soup.find_all(present_in_href("/partial/path"))
Supposons que vous ayez un html après avoir sélectionné avec soup.find('div', class_='base
class') :
Et si vous voulez accéder à la balise <a> href , vous pouvez le faire de cette manière:
a_tag = html.a
link = a_tag['href']
print(link)
https://example.com
Ceci est utile lorsque vous ne pouvez pas sélectionner directement la balise <a> car ses attrs ne
https://riptutorial.com/fr/home 8
vous donnent pas d’identification unique, il existe d’autres balises <a> jumelées dans la page
analysée. Mais vous pouvez sélectionner de manière unique une balise parent contenant <a> .
Considérons la situation lorsque vous analysez le nombre de pages et que vous souhaitez
collecter la valeur de l'élément facultatif (peut être présenté sur une page et peut être absent sur
une autre) pour une page spécifique.
De plus, l'élément lui-même, par exemple, est l' élément le plus ordinaire de la page, c'est-à-dire
qu'aucun attribut spécifique ne peut le localiser de manière unique. Mais vous voyez que vous
pouvez sélectionner correctement son élément parent et que vous connaissez le numéro d'ordre
de l'élément souhaité dans le niveau d'imbrication correspondant.
L'élément recherché est facultatif, donc il pourrait y avoir 2 situations pour que html soit:
html_1 = '''
<div class="base class"> # №0
<div>Sample text 1</div> # №1
<div>Sample text 2</div> # №2
<div>!Needed text!</div> # №3
</div>
html_2 = '''
<div class="base class"> # №0
<div>Sample text 1</div> # №1
<div>Sample text 2</div> # №2
</div>
Si vous avez html_1 vous pouvez collecter du !Needed text! de tag №3 de cette façon:
Il obtient initialement №1 div , puis 2 fois passe au div suivant au même niveau d'imbrication pour
arriver à №3.
Utilité de cette approche vient lorsque vous obtenez html_2 - approche ne vous donnera pas
https://riptutorial.com/fr/home 9
d'erreur, il ne donnera None :
print(html_2.div.find_next_sibling().find_next_sibling())
None
L'utilisation de find_next_sibling() est cruciale car elle limite la recherche d'éléments par niveau
d'imbrication respectif. Si vous utilisez find_next() balise №4 sera collectée et vous ne le
souhaitez pas:
print(html_2.div.find_next().find_next())
<div>Confusing div text</div>
Toutes les fonctions décrites ont leurs variantes multiples pour attraper toutes les balises, pas
seulement la première:
find_next_siblings()
find_previous_siblings()
find_all_next()
find_all_previous()
https://riptutorial.com/fr/home 10
Crédits
S.
Chapitres Contributeurs
No
Commencer avec Antti Haapala, Community, Dair, DMPierre, Larry Cai, vikingben,
1
beautifulsoup Whirl Mind
Éléments de
2 alecxe, Dmitriy Fialkovskiy, sytech
localisation
https://riptutorial.com/fr/home 11