Grâce à ce guide, vous allez apprendre :
- Ce que sont les notebooks Jupyter
- Pourquoi utiliser Jupyter Notebooks pour le web scraping
- Comment l’utiliser dans un tutoriel étape par étape
- Cas d’utilisation des Notebooks Jupyter pour le scraping de données en ligne
C’est parti !
Que sont les blocs-notes Jupyter ?
Dans le contexte de Jupyter, un notebook est un « document partageable qui combine du code informatique, des descriptions en langage clair, des données, des diagrammes, des graphiques et des contrôles interactifs ».
Les carnets de notes fournissent des environnements interactifs pour prototyper et expliquer du code, explorer et visualiser des données, et partager des idées. En particulier, les carnets produits par l’application Jupyter Notebook App sont appelés Jupyter Notebooks.
L’application Jupyter Notebook est une application serveur-client qui permet d’éditer et d’exécuter des documents notebook via un navigateur web. Il peut être exécuté sur un bureau local ou installé sur un serveur distant.
Les notebooks (ou calepins) Jupyter fournissent ce que l’on appelle le « noyau », c’est-à-dire un « moteur de calcul » qui exécute le code contenu dans un notebook. En détail, le noyau ipython
exécute le code Python (mais il existe des noyaux dans d’autres langages) :
L’application Jupyter Notebook comporte un tableau de bord qui prend en charge les opérations typiques telles que l’affichage des fichiers locaux, l’ouverture des documents de notebook existants, la gestion des noyaux des documents, et plus encore :
Pourquoi utiliser Jupyter Notebooks pour le Web Scraping ?
Les notebooks Jupyter ont été spécifiquement conçus pour l’analyse de données, ainsi que la recherche et le développement :
- Développement interactif: écrire et exécuter le code en petits morceaux gérables appelés cellules. Chaque cellule peut travailler indépendamment des autres. Cela garantie des tests et un débogage simplifiés.
- Organisation: Utiliser le markdown dans ses cellules pour documenter le code, expliquer la logique et ajouter des notes ou des instructions.
- L’intégration avec des outils d’analyse de données : après le scraping, vous pouvez immédiatement nettoyer, traiter et analyser les données en Python, car les notebooks Jupyter s’intègrent à des bibliothèques telles que
pandas
,matplotlib
,seaborn
et bien d’autres. - Reproductibilité et partage : Les Jupyter Notebooks peuvent être facilement partagés avec d’autres sous forme de fichiers .ipynb (son format standard) ou convertis dans d’autres formats tels que ReST Markdown, etc.
Avantages et inconvénients
Voici les avantages et les inconvénients de l’utilisation de Jupyter Notebooks pour le scraping de données :
👍Avantages :
- Débogage pas à pas : comme chaque cellule peut être exécutée indépendamment, vous pouvez subdiviser votre code d’extraction de données en différentes cellules et les exécuter. Cela vous permet de déboguer de petits morceaux de code en exécutant les cellules et en interceptant les bugs au niveau de la cellule.
- Documentation: Utilisez Markdown dans les cellules pour créer des fichiers où vous pouvez documenter le fonctionnement de votre code de scraping, ainsi que décrire la logique derrière les choix que vous avez faits.
- Flexibilité: Dans Jupyter Notebooks, vous pouvez combiner le web scraping, le nettoyage des données et l’analyse dans un seul environnement. Cela permet de passer d’un environnement à l’autre, par exemple d’écrire le script de scraping dans un IDE et d’analyser les données ailleurs.
👎Inconvénients :
- Pas idéal pour les projets à grande échelle: Les Jupyter Notebooks ont tendance à devenir de longs documents. Ce n’est pas le choix idéal pour les projets de scraping de données à grande échelle.
- Limites de performance: Les ordinateurs portables ont tendance à devenir lents ou à ne plus répondre lorsqu’ils travaillent avec de grands ensembles de données ou exécutent de longs scripts. En savoir plus sur comment rendre le web scraping plus rapide.
- Pas idéal pour l’automatisation: Si vous avez besoin d’exécuter votre scraper selon un calendrier ou de le déployer dans le cadre d’un système plus large, les Notebooks Jupyter ne sont pas le meilleur choix. La raison est simple : ils ont principalement été conçus pour une exécution interactive et manuelle des cellules.
Comment utiliser Jupyter Notebooks pour le Web Scraping : Tutoriel étape par étape
Vous savez maintenant pourquoi vous devriez utiliser Jupyter Notebooks pour le web scraping. Nous allons maintenant pouvoir aborder la manière de les utiliser dans un scénario de scraping réel !
Prérequis
Pour reproduire ce tutoriel, votre système doit répondre aux conditions préalables suivantes :
- Python 3.6 ou supérieur : toute version de Python supérieure à 3.6 fera l’affaire. Plus précisément, nous installerons les dépendances via
pip
qui est déjà installé avec toute version de Python supérieure à 3.4.
Etape 1 : Mise en place de l’environnement et installation des dépendances
Supposons que vous appeliez le dossier principal de votre projet scraper/
. À la fin de cette étape, le dossier aura la structure suivante :
scraper/
├── analysis.ipynb
└── venv/
Où :
analysis.ipynb
est le carnet Jupyter qui contient tout le code.venv/
contient l’environnement virtuel.
Vous pouvez créer le répertoire venv/
de l’environnement virtuel comme suit :
python -m venv venv
Pour l’activer, sous Windows, exécutez :
venv\Scripts\activate
De manière équivalente, sous macOS/Linux, exécutez :
source venv/bin/activate
Dans l’environnement virtuel activé, installez toutes les bibliothèques nécessaires pour ce tutoriel :
pip install requests beautifulsoup4 pandas jupyter seaborn
Ces bibliothèques servent les objectifs suivants :
requêtes
: Pour effectuer des requêtes HTTP.beautifulsoup4 :
pour l’analyse des documents HTML et XML.pandas :
une puissante bibliothèque de manipulation et d’analyse de données, idéale pour travailler avec des données structurées telles que des fichiers CSV ou des tableaux.jupyter
: Un environnement de développement interactif basé sur le web pour l’exécution et le partage de code Python, idéal pour l’analyse et la visualisation.seaborn
: Une bibliothèque de visualisation de données Python basée sur Matplotlib.
Pour créer le fichier analysis.ipynb
, vous devez d’abord entrer dans le dossier scraper/
:
cd scraper
Ensuite, initialiser un nouveau Notebook Jupyter avec cette commande :
jupyter notebook
Vous pouvez maintenant accéder à votre Jupyter Notebook App via le locahost8888
.
Créez un nouveau fichier en cliquant sur l’option « Nouveau > Python 3 » :
Le nouveau fichier sera automatiquement appelé untitled.ipynb
. Vous pouvez le renommer sur le tableau de bord :
Excellent ! Nous allons maintenant pouvoir passer au scraping web avec les notebooks Jupyter.
Étape 2 : définir la page cible
Dans ce tutoriel, vous allez scraper les données du site web worldometer. Plus précisément, la page qui nous intéresse est celle qui concerne les émissions de CO2 aux États-Unis par an et qui fournit des données tabulaires comme celles-ci :
Étape 3 : Récupérer les données
Vous pouvez récupérer les données de la page cible et les enregistrer dans un fichier CSV comme suit :
import requests
from bs4 import BeautifulSoup
import csv
# URL of the website
url = "https://www.worldometers.info/co2-emissions/us-co2-emissions/"
# Send a GET request to the website
response = requests.get(url)
response.raise_for_status()
# Parse the HTML content
soup = BeautifulSoup(response.text, "html.parser")
# Locate the table
table = soup.find("table")
# Extract table headers
headers = [header.text.strip() for header in table.find_all("th")]
# Extract table rows
rows = []
for row in table.find_all("tr")[1:]: # Skip the header row
cells = row.find_all("td")
row_data = [cell.text.strip() for cell in cells]
rows.append(row_data)
# Save the data to a CSV file
csv_file = "emissions.csv"
with open(csv_file, mode="w", newline="", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerow(headers) # Write headers
writer.writerows(rows) # Write rows
print(f"Data has been saved to {csv_file}")
Voici ce que fait ce code :
- La bibliothèque
requests
est utilisée pour envoyer une requête GET à la page cible avec la méthoderequests.get()
. Nous vérifions ensuite les erreurs de requête avec la méthoderesponse.raise_for_status()
. - Il utilise
BeautifulSoup
pour analyser le contenu HTML en instanciant la classeBeautifulSoup()
et en trouvant le sélecteur detable
avec la méthodesoup.find()
. En particulier, cette méthode est utile pour localiser le tableau contenant les données. Si vous n’êtes pas familier avec cette syntaxe, lisez notre guide sur BeautifulSoup Web scraping. - Nous utilisons une forme de compréhension de liste pour extraire l’en-tête du tableau.
- La boucle
for
permet d’extraire toutes les données du tableau tout en sautant la ligne d’en-tête. - Enfin, il ouvre un nouveau fichier CVS et y ajoute toutes les données récupérées.
Vous pouvez coller ce code dans une cellule et l’exécuter en appuyant sur SHIFT+ENTER
.
Une autre façon d’exécuter la cellule est de la sélectionner et d’appuyer sur le bouton « Exécuter » sur le tableau de bord :
Le message « Les données ont été sauvegardées dans emissions.csv » vous informe de la réussite de l’opération d’extraction des données.
Étape 4 : S’assurer que les données sont correctes
Maintenant que vous avez sauvegardé les données dans un fichier CVS. Ouvrez le fichier CSV et vérifiez si tout s’est bien passé – il peut arriver que vous rencontriez des problèmes de conversion. Pour ce faire, vous pouvez taper le code suivant dans une nouvelle cellule :
import pandas as pd
# Load the CSV file into a pandas DataFrame
csv_file = "emissions.csv"
df = pd.read_csv(csv_file)
# Print the DataFrame
df.head()
Ce code fait ce qui suit :
- Ouvre le fichier CSV en tant que cadre de données, grâce à
pandas
, avec la méthodepd.read_csv()
. - Imprime les cinq premières lignes du cadre de données avec la méthode
df.head()
.
Voici le résultat attendu :
Formidable ! Il ne reste plus qu’à représenter les données extraites.
Étape 5 : Visualiser les données
Vous pouvez maintenant effectuer toutes les analyses de données que vous souhaitez. Par exemple, vous pouvez utiliser seaborn
pour créer un graphique linéaire qui montre la tendance des émissions de C02 au fil des ans. Procédez comme suit :
import seaborn as sns
import matplotlib.pyplot as plt
# Load the CSV file into a pandas DataFrame
csv_file = "emissions.csv"
df = pd.read_csv(csv_file)
# Clean column names be removing extra spaces
df.columns = df.columns.str.strip().str.replace(' ', ' ')
# Convert 'Fossil CO2 Emissions (tons)' to numeric
df['Fossil CO2 Emissions (tons)'] = df['Fossil CO2 Emissions (tons)'].str.replace(',', '').astype(float)
# Ensure the 'Year' column is numeric
df['Year'] = pd.to_numeric(df['Year'], errors='coerce')
df = df.sort_values(by='Year')
# Create the line plot
plt.figure(figsize=(10, 6))
sns.lineplot(data=df, x='Year', y='Fossil CO2 Emissions (tons)', marker='o')
# Add labels and title
plt.title('Trend of Fossil CO2 Emissions Over the Years', fontsize=16)
plt.xlabel('Year', fontsize=12)
plt.ylabel('Fossil CO2 Emissions (tons)', fontsize=12)
plt.grid(True)
plt.show()
Voici ce que fait ce code :
- Il utilise
pandas
pour :- Ouvrir le fichier CSV.
- Nettoyer les noms des colonnes en supprimant les espaces supplémentaires avec la méthode
df.columns.str.strip().str.replace(' ', ' ')
(si vous n’utilisez pas cette méthode, vous obtiendrez des erreurs dans votre code dans cet exemple). - Permet d’accéder à la colonne « Fossil CO2 Emissions (tons) » (émissions de CO2 fossile (en tonnes)) et convertit les données en nombres avec la méthode
df['Fossil CO2 Emissions (tons)'].str.replace(',', '').astype(float)
. - Accède à la colonne « Years » (années), convertit les valeurs en nombres avec la méthode
pd.to_numeric()
et trie les valeurs par ordre croissant avec la méthodedf.sort_values()
.
- On utilise les bibliothèques
matplotlib
etseaborn
(qui est construite surmatplotlib
, donc installée lorsque vous installezseaborn
) pour créer le tracé réel.
Voici le résultat attendu :
Impressionnant, n’est-ce pas ? Voilà à quel point le scraping réalisé avec un notebook Jupyter est puissant.
Étape 6 : Assemblage du tout
Voici à quoi ressemble le document final du notebook Jupyter pour le web scraping :
Notez la présence de différents blocs, chacun avec sa sortie.
Cas d’utilisation de Jupyter Notebook Web Scraping
Il est temps de discuter des cas d’utilisation de Jupyter Notebooks lors du web scraping !
Tutoriels
N’oubliez pas que chaque cellule d’un Jupyter Notebook peut être exécutée indépendamment. Avec l’ajout de la prise en charge de Markdown, la bibliothèque devient un excellent outil pour créer des tutoriels étape par étape.
Par exemple, vous pouvez alterner les cellules contenant du code et celles expliquant la logique et le raisonnement qui le sous-tendent. Dans le cas du web scraping, les carnets Jupyter sont particulièrement utiles. Vous pouvez les utiliser pour créer des tutoriels pour les développeurs juniors, en les guidant à travers chaque étape du processus.
Science et recherche (R&D)
En raison de leur nature interactive et de leur capacité à être facilement exportés à des fins de collaboration, les carnets Jupyter sont idéaux pour la recherche et la R&T. C’est particulièrement vrai pour le web scraping. Par exemple, lorsque vous scrapez des sites web nécessitant plusieurs séries d’essais et d’erreurs, vous pouvez conserver tous vos tests dans un seul notebook et utiliser Markdown pour mettre en évidence les tests réussis.
Exploration des données
La bibliothèque Jupyter a été spécialement conçue pour l’exploration et l’analyse des données. Cela en fait également un outil parfait pour le web scraping à des fins d’apprentissage automatique.
Ce cas d’utilisation s’applique directement à l’exemple que vous avez codé ci-dessus. Vous avez récupéré les données du site web et les avez immédiatement analysées, le tout dans le même environnement de codage.
Conclusion
Dans ce billet, vous avez appris comment les Notebooks Jupyter peuvent être un outil puissant pour le web scraping, en offrant un environnement interactif et flexible pour l’extraction et l’analyse de données. Cependant, lorsqu’il s’agit de développer vos activités de web scraping ou d’automatiser des tâches, les notebooks Jupyter ne sont peut-être pas la solution la plus efficace.
C’est là qu’interviennent nos Web Scrapers . Que vous soyez un développeur à la recherche de solutions basées sur des API ou que vous recherchiez une option sans code, nos Web Scrapers sont conçus pour simplifier et améliorer vos efforts de collecte de données. Avec des fonctionnalités telles que des points d’extrémité dédiés pour plus de 100 domaines, la gestion des requêtes en masse, la rotation automatique des adresses IP et la résolution des CAPTCHA, vous pouvez extraire des données structurées sans effort et à grande échelle. Créez un compte Bright Data gratuit dès aujourd’hui pour essayer nos solutions de scraping et tester nos proxies !
Aucune carte de crédit requise