Un guide pour débutants pour apprendre le Web Scraping et la visualisation de données avec Python

Guides, Python, Scraping, Dec-19-20215 minutes de lecture

Comment extraire rapidement et efficacement des informations significatives de sites web ? L'extraction manuelle des données prend beaucoup de temps. Vous pouvez utiliser le web scraping, une méthode automatisée d'acquisition de données non tabulaires ou mal structurées à partir de sites web. Ensuite, vous pouvez convertir ces données dans un format structuré et utilisable, tel qu'une feuille de calcul.

Table des matières

Comment extraire rapidement et efficacement des informations significatives de sites web ? L'extraction manuelle des données prend beaucoup de temps. Vous pouvez utiliser le web scraping, une méthode automatisée d'acquisition de données non tabulaires ou mal structurées à partir de sites web. Ensuite, vous pouvez convertir ces données dans un format structuré et utilisable, tel qu'une feuille de calcul ou un fichier .csv.

Le web scraping permet d'archiver des données et de suivre les changements de données en ligne. Les entreprises l'utilisent largement à différentes fins. Par exemple, les magasins en ligne l'utilisent pour récupérer les éléments de prix de leurs concurrents et les pages accessibles au public. Ils utilisent ensuite ces informations pour ajuster leurs prix. Une autre pratique courante du web scraping est le contact scraping, dans lequel les organisations collectent des données personnelles telles que des numéros de téléphone ou des adresses électroniques à des fins de marketing. 

Pourquoi utilise-t-on le Web Scraping ?

Pourquoi faut-il extraire de grandes quantités d'informations des sites web ? Pour le comprendre, examinons les applications suivantes du web scraping.

  • Recherche et développement - Vous pouvez collecter de grands ensembles de données (température, informations générales, etc.) à partir de sites web et les analyser pour réaliser des enquêtes à des fins de recherche et de développement.
  • Comparaison des prix - Des entreprises et des services comme ParseHub utilisent le web scraping pour collecter des données sur les sites d'achat en ligne et comparer les prix des produits.
  • Offres d'emploi - Vous pouvez utiliser le web scraping pour collecter des informations sur les offres d'emploi et les entretiens d'embauche sur différents sites web et les répertorier en un seul endroit. 
  • Scraping des médias sociaux - Vous pouvez utiliser le web scraping pour collecter des données à partir de sites web de médias sociaux tels qu'Instagram, Twitter et découvrir les tendances.
  • Collecte d'adresses électroniques - De nombreuses entreprises utilisent le courrier électronique comme moyen de marketing. Elles utilisent le web scraping pour collecter des identifiants d'adresses électroniques et envoient ensuite des courriels en masse.

Le scraping web avec Python

Vous pouvez extraire des données de sites web en suivant les étapes ci-dessous.

  • Obtenez l'URL que vous souhaitez récupérer
  • Inspecter la page
  • Trouver les données à extraire
  • Rédiger le code
  • Exécuter le code et extraire les données
  • Stocker les données dans le format souhaité

Les bibliothèques que nous pouvons utiliser pour le web scraping en Python sont les suivantes :

Pandas - Pandas est utilisé pour manipuler et analyser les données. Vous pouvez utiliser cette bibliothèque pour extraire les données et les stocker dans le format requis.

Beautiful Soup - Il s'agit d'un paquetage Python pour analyser les documents HTML et XML. Il crée des arbres d'analyse qui permettent d'extraire facilement des données de sites web.

Requests - Il s'agit d'une bibliothèque HTTP simple.

Nous utiliserons ce site pour extraire le nombre de cas COVID. Ensuite, nous analyserons les données et créerons des visualisations.

Importer des bibliothèques

Vous pouvez importer des requêtes et BeautifulSoup en Python pour faire du web scraping, comme indiqué ci-dessous.

import requests 
from bs4 import BeautifulSoup

URL pour l'extraction de données

Spécifiez l'URL du site web à partir duquel vous devez extraire les données. Vous devez utiliser la méthode requests.get() pour envoyer une requête GET à l'URL spécifiée. De plus, vous devez créer un constructeur BeautifulSoup qui prendra les deux arguments de type chaîne comme indiqué dans le code ci-dessous.

url = 'https://www.worldometers.info/coronavirus/countries-where-coronavirus-has-spread/'
page = requests.get(url) 
soup = BeautifulSoup(page.text, 'html.parser') 
  
data = []

Récupérer chaque élément

Vous pouvez récupérer chaque élément de la table URL'sURL en utilisant la méthode soup.find_all(). Elle renvoie un objet qui offre un accès indexé aux occurrences trouvées et peut être imprimé à l'aide d'une boucle for ou while.

data_iterator = iter(soup.find_all('td'))

Utilisation d'une boucle

Vous pouvez utiliser une boucle while True qui se répète jusqu'à ce qu'il y ait des données disponibles dans l'itérateur.

while True: 
   try: 
        country = next(data_iterator).text 
        confirmé = next(data_iterator).text 
        décès = next(data_iterator).text 
        continent = next(data_iterator).text

Pour les colonnes "confirmés" et "décès", veillez à supprimer les virgules et à convertir en int. 

data.append(( 
            pays, 
            (confirmed.replace(', ', '')), 
            (deaths.replace(',', '')), 
            continent
        )) 
    
    sauf StopIteration : 
       break

Lorsque le nombre d'éléments restant à itérer est égal à zéro, l'erreur StopIteration est levée.

Créer un cadre de données Pandas

Vous pouvez extraire les données du site web après avoir exécuté le code ci-dessus. Vous devez créer un cadre de données Pandas pour analyser les données plus en détail. Dans le code ci-dessous, nous avons trié les données en fonction du nombre de cas COVID confirmés.

Importez la bibliothèque pandas pour créer un cadre de données.

data.sort(key = lambda row : row[1], reverse = True)
import pandas as pd
df = pd.DataFrame(data,columns=['country','Number of cases','Deaths','Continent'],dtype=float)
df.head()
df['Nombre de cas'] = [x.replace(',', '') for x in df['Nombre de cas']]]
df['Nombre de cas'] = pd.to_numeric(df['Nombre de cas'])
df

Vous obtiendrez le résultat suivant :

Pour obtenir des informations sur le Dataframe, utilisez df.info().

df.info()

Créer la colonne Death_rate

Nous allons créer une nouvelle colonne nommée Death_rate comme indiqué ci-dessous.

dff = df.sort_values(by ='Nombre de cas',ascending = False)
dff['Taux de mortalité'] = (dff['Décès']/dff['Nombre de cas'])*100
dff.head()

Le résultat est le suivant.

Récupération de données sur le Web avec proxys

Un serveur proxy vous permet d'utiliser une adresse IP unique pour accéder aux informations que vous souhaitez récupérer. De cette manière, le site web ne voit pas votre adresse IP réelle, ce qui vous permet de récupérer des données de manière anonyme. Vous devez utiliser proxys pour le web scraping pour les raisons suivantes.

  • Vous pouvez envoyer plusieurs requêtes simultanées à un serveur web sans vous faire bannir en utilisant un pool de proxys.
  • Avec l'aide de proxys, vous pouvez effectuer des requêtes à partir d'un lieu, d'un appareil, d'un fournisseur d'accès à Internet ou d'un réseau mobile particulier. Vous pouvez également explorer le contenu affiché pour une zone ou un appareil spécifique.
  • Certains sites web ont des interdictions d'IP, et vous pouvez les contourner à l'aide de proxys. 

Types de proxys pour le Web Scraping

Vous pouvez utiliser les deux sites proxys ci-dessous pour extraire des données de sites web.

  • Datacenter proxys - Les adresses IP du datacenter sont les adresses IP des serveurs. Les serveurs sont situés dans des centres de données. L'objectif principal du centre de données proxys est de cacher votre adresse aux sites web que vous parcourez. Ces proxys sont principalement utilisés pour récupérer des données commerciales.
  • Residential proxys - Les adresses IP résidentielles sont plus chères que les adresses IP des centres de données et sont difficiles à obtenir. Ces adresses proxys vous permettent de choisir un emplacement spécifique (ville, pays, etc.) et de surfer sur le web en tant qu'utilisateur réel dans cette zone géographique.

Visualisation de données avec Python

Vous savez que la visualisation de données est la représentation graphique de données ou d'informations. Vous pouvez utiliser des outils visuels tels que des diagrammes, des cartes et des graphiques comme moyen accessible de comprendre les données représentées. Voyons comment nous pouvons visualiser les données extraites de ce site web à l'aide d'outils de visualisation de données.

Importer des bibliothèques

Vous devez importer les bibliothèques suivantes pour visualiser les données, comme indiqué ci-dessous.

import seaborn as sns
import matplotlib.pyplot en tant que plt
from pylab import rcParams

Tracer un diagramme de paires

Vous pouvez tracer un diagramme de paires pour mettre en évidence des relations par paires dans un ensemble de données. Vous pouvez facilement le mettre en œuvre à l'aide du code ci-dessous et identifier les tendances dans les données en vue d'une analyse ultérieure.

rcParams['figure.figsize'] = 15, 10
from matplotlib.pyplot import figure
figure(num=None, figsize=(20, 6), dpi=80, facecolor='w', edgecolor='k')
sns.pairplot(dff,hue='Continent')

Vous obtiendrez le résultat suivant.

Tracer un diagramme à barres

Vous pouvez tracer un diagramme à barres qui présente les données catégorielles sous forme de barres rectangulaires et compare les valeurs des différentes catégories dans les données. 

sns.barplot(x = 'pays',y = 'Nombre de cas',data = dff.head(10))

Le résultat est le suivant.

Tracer un nuage de points

Vous pouvez comprendre la relation entre des valeurs numériques à l'aide d'un diagramme de dispersion. Il utilise des points pour représenter la relation entre les variables. 

sns.scatterplot(x = "Nombre de cas", y = "Décès",hue = "Continent",data = dff)

Le résultat est le suivant.

Regrouper et trier les données

Dans le code ci-dessous, nous regrouperons les données par continent et les trierons en fonction du nombre de cas COVID.

dfg = dff.groupby(by = 'Continent',as_index = False).agg({'Number of cases':sum,'Deaths':sum})
dfgg = dfg[1:]
df1 = dfgg.sort_values(by = 'Number of cases',ascending = False)
df1['Death_rate'] = (df1['Deaths']/df1['Number of cases'])*100
df1.sort_values(by = 'Death_rate',ascending = False)

Le résultat est le suivant.

Nous allons maintenant tracer un diagramme à barres entre "Continent" et "Taux de mortalité", comme indiqué ci-dessous.

sns.barplot(x = 'Continent',y = 'Taux de mortalité',data = df1.sort_values(by = 'Taux de mortalité',ascending = False))

Le résultat est le suivant.

Ce diagramme à barres montre que, parmi tous les pays, c'est en Amérique du Sud que le taux de mortalité est le plus élevé et en Australie qu'il est le plus bas. 

Importer un tableau de texte

Installez texttable pour créer un simple tableau ASCII. Ensuite, importez-le en tant que tt.

!pip install texttable

import texttable as tt

Créer un objet de type tableau de texte

Vous devez créer un objet tableau de texte comme indiqué ci-dessous. Vous devez ajouter une ligne vide au début du tableau pour les en-têtes et aligner les colonnes.

table = tt.Texttable() 

table.add_rows([(None, None, None, None)] + data) table.set_cols_align(('c', 'c', 'c', 'c'))  # 'l' indique la gauche, 'c' indique le centre et 'r' indique la droite 
table.header((' Pays ', ' Nombre de cas ', ' Décès ', ' Continent ')) 
  
print(table.draw())

Ici, la sortie représente certaines lignes du tableau comme suit.

Conclusion

Le web scraping permet d'extraire rapidement et efficacement de grandes quantités de données à partir de sites web. Vous pouvez convertir les données non structurées extraites dans un format utilisable tel qu'un fichier .csv. Nous avons vu que nous pouvons extraire les données du web en utilisant deux modules, à savoir Pandas et BeautifulSoup. proxys vous permet d'extraire les données du web de manière anonyme. Vous pouvez utiliser soit le centre de données, soit le site résidentiel proxys pour l'extraction de données sur le web. Les proxys résidentiels sont plus fiables mais plus chers que les proxys des centres de données. En outre, nous pouvons analyser les données pour en tirer des informations pertinentes en fonction de nos besoins. Dans cet article, nous avons analysé les données à l'aide d'outils de visualisation des données tels que les diagrammes à barres, les diagrammes à paires et les diagrammes de dispersion.