Web Scraping: Télécharger rapidement des données publiques avec Python et Beautiful Soup

article python scraping Jun 13, 2024

Le 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”.

Ne ratez pas nos prochains contenus

Inscrivez vous à notre Newsletter pour recevoir tous nos prochains contenus gratuits : Articles, Webinaires, Podcasts, Astuces vidéos,...

Data AI Lab

Transformez votre quotidien avec des compétences clés en data. Des formations, conseils et défis pour une maîtrise pointue en Data Science et IA.

 

Liens

Accueil
Challenges Data
Consulting

 

Formations

Parcours Data Analyst
Parcours Data Engineer
Voir toutes les formations

 

Ressources

Articles
Webinaires
Tuto vidéos

 

All rights reserved 2024 - Mentions légales - Politique de confidentialité