Web Scraping: Télécharger rapidement des données publiques avec Python et Beautiful Soup
Jun 13, 2024Le scraping consiste à extraire automatiquement des données spécifiques des pages Web. Il est comparable à un copier-coller automatique de grande échelle. Des logiciels ou des programmes sont utilisés pour récupérer des informations ciblées sur le site Web et les stocker dans une base de données locale ou une feuille de calcul pour une utilisation ultérieure. Nous vous présentons dans cet article les applications de cet traitement, et une démonstration sur un site internet public.
Les cas d'usage web scraping
Cette technique d'extraction des données a nombreuses applications dans divers secteurs d’activité parmi lesquelles:
- Le suivi des prix : pour surveiller l'évolution des prix des produits sur les sites web concurrents. Grâce à ces données, il est possible d'établir des prix compétitifs pour leurs propres produits.
- Les études de marché: pour recueillir des informations sur les tendances du marché, telles que les préférences des clients et la popularité des produits. Ces données peuvent être utilisées pour concevoir de nouveaux produits et des stratégies marketing spécifiques.
- La prospection commerciale : pour récupérer des données de contact provenant de sites web, comme des adresses e-mail et des numéros de téléphone. Il est possible d'utiliser ces informations afin de générer des prospects pour des campagnes de vente.
- L'analyse de données : pour recueillir de grandes quantités de données provenant de sites web. Par la suite, il est possible d'analyser ces données afin de repérer des tendances et des modèles.
En résumé, le web scraping sur Internet est un outil efficace pour recueillir des informations, surveiller la concurrence, améliorer les produits et prendre des décisions informées. Les entreprises, les chercheurs, les analystes de données et les spécialistes du marketing l'emploient.
Le web scraping sur les données publiques
Dans notre exemple nous utiliserons le site web du Conab, une entreprise publique brésilienne basée à Brasília. Elle a pour mission de superviser les politiques agricoles et de répondre aux besoins essentiels de la population. Le site Internet de la Conab fournit de divers renseignements dont les prix de gros des produits, la logistique, le stockage et l'import/export.
Haut de page du site ciblé:
Fichier cible à scraper:
Étape 1 : Installer les bibliothèques et Importer les modules
Avant de pouvoir utiliser les bibliothèques, vous devez les installer. Vous pouvez les installer à l'aide de pip en exécutant les commandes suivantes :
pip install BeautifulSoup pip install Os
pip install Tempfile
pip install Pandas
pip install requests
Une fois la bibliothèque de requêtes installée, vous pouvez l'importer dans votre script Python à l'aide des commandes suivantes :
import requests import pandas as pd import tempfile import os from urllib.request import urlopen from bs4 import BeautifulSoup
Étape 2 : Définition des variables, et connexion
On définit ci-dessous les variables utiles comme celle nommée link qui stocke l'adresse URL de base d'une section du site Web de Conab:
link =" https://www.conab.gov.br/info-agro/safras/progresso-de-safra?start=50"
selected_locations = [] # Dataframe
response = requests.get(link)
On obtient le contenu HTML de la page et on vérifie si la demande a été acceptée:
if response.status_code == 200: # récupération du contenu de la page web à partir du lien URL
content = response.text
# création de la structure contenant les informations de la page HTML
soup = BeautifulSoup(content, 'html.parser')
# recherche du lien de téléchargement du fichier
target_a_tag = soup.find('a', {'title': 'PlantioZeZColheitaZ21-05ZaZ27-05.xlsx'})
if target_a_tag:
link = target_a_tag['href']
file_link = "https://www.conab.gov.br" + link
print('file_link : ',file_link)
# suite dans le bloc suivant...
# créer un nouveau fichier Excel sans ligne par défaut avec l'option index= False
output_file_path = 'DatAiLab.xlsx'
selected_locations.to_excel(output_file_path, index=False)
# Vérifier si la demande a été échouée
else: print(f"Failed to fetch the page content from {link}")
Étape 3: Lecture du fichier et enregistrement dans un Dataframe
Le code ci-dessous télécharge un fichier à partir de l'URL spécifiée et l'enregistre dans un fichier temporaire sur votre système. Le chemin d'accès au fichier temporaire est enregistré dans la variable temp_file_path pour une utilisation ultérieure dans le programme.
# téléchargement du fichier
with urlopen(file_link) as response: with tempfile.NamedTemporaryFile(delete=False) as temp_file: temp_file.write(response.read()) temp_file_path = temp_file.name
# suite dans le bloc suivant...
# suppression du fichier pour libérer la mémoire
os.remove(temp_file_path)
# affichage du Dataframe
print(selected_locations)
Le code ci-dessous contient les manipulations de données pour récupérer les informations du fichier dans un dataframe, avec une structure cohérente des données:
# lecture du fichier Excel à partir du chemin temp_file_path df = pd.read_excel(temp_file_path, sheet_name="Progresso de safra", engine='openpyxl', index_col=0) # insertion en position 0 d'une colonne appelée "Date" dont la valeur correspond à celle du fichier
df.insert(0, 'Date', '27-05-2023')
# La 2ème colonne est nommée "Location" df = df.rename(columns={df.columns[1]: 'Location'})
# On supprime les doublons
unique_locations = df['Location'].unique() # Les emplacements sélectionnés sont filtrés dans le DataFrame selected_locations = df[df['Location'].isin(['Maranhão', 'Piauí', 'Bahia', 'Goiás', 'Minas Gerais', 'São Paulo', 'Paraná', 'Santa Catarina', 'Rio Grande do Sul'])] # La dernière colonne (colonne la plus à droite) est renommée en “value”.
selected_locations = selected_locations.rename(columns={selected_locations.columns[-1]: 'value'}) # Suppression des colonnes “Unnamed: 2” et “Unnamed: 3” selected_locations = selected_locations.drop(['Unnamed: 2', 'Unnamed: 3'], axis=1)
# insertion d'une colonne appelée "Crop" dont la valeur correspond à l'année du fichier
selected_locations.insert(2, 'Crop', '2022/23')
Amélioration
En addition à ce code il est possible de rendre dynamique la récupération des fichiers en créant une boucle for pour parcourir les pages à la condition qu'il existe une logique d'incrémentation, ce qui est le cas ici où le chiffre de l'URL augmente de 10 à chaque nouvelle page (50
, 60
, etc.), et de connaitre le nom des fichiers ciblés à l'avance (PlantioZeZColheitaZ21-05ZaZ27-05.xlsx
)
Vous aurez aussi besoin d'ajouter chaque DataFrame à la liste des résultats avec par exemple la fonction append() (results.append(df)
)
Conclusion
Le scraping de données est une technique essentielle pour extraire des données de diverses sources. Le processus automatise la collecte de gros volumes de données provenant de différentes sources, fournissant ainsi des mises à jour en temps réel qui peuvent être intégrées dans une base de données centralisée. Cela facilite l’analyse et la compréhension des informations collectées. De plus, le scraping permet de surveiller les concurrents, de suivre les tendances du marché, d’ajuster les stratégies commerciales et d’économiser du temps et des coûts de main-d’œuvre en réduisant la saisie manuelle des données et en minimisant les erreurs. Cependant, il est essentiel de prendre en compte des aspects juridiques, éthiques et techniques pour garantir le succès et la responsabilité des projets de “data scraping”.