Web Scraping, Expressions Régulières et Visualisation de Données, le tout en Python

Python, Scraping, Nov-15-20225 minutes de lecture

Le web scraping peut être défini comme la méthode de collecte et de restructuration des données des sites web. Il peut également être défini comme l'approche programmatique de l'obtention de données de sites web de manière automatisée. Par exemple, vous souhaitez extraire les identifiants électroniques de toutes les personnes qui ont commenté un article sur Facebook. Vous pouvez le faire en

Table des matières

Le web scraping peut être défini comme la méthode de collecte et de restructuration des données des sites web. Il peut également être défini comme l'approche programmatique de l'obtention de données de sites web de manière automatisée. Par exemple, vous souhaitez extraire les identifiants électroniques de toutes les personnes qui ont commenté un article sur Facebook. Vous pouvez le faire de deux manières. Tout d'abord, vous pouvez pointer le curseur sur la chaîne d'adresses électroniques de n'importe quelle personne. Vous pouvez ensuite la copier et la coller dans un fichier. Cette méthode est connue sous le nom de "scraping manuel". Mais qu'en est-il si vous souhaitez recueillir 2 000 adresses électroniques ? Avec l'aide d'un outil de web scraping, vous pouvez extraire tous les identifiants d'adresses électroniques en 30 secondes au lieu de 3 heures si vous utilisez le scraping manuel.

Vous pouvez utiliser des outils de web scraping pour extraire des informations de sites web. Il suffit de savoir cliquer et aucune connaissance en programmation n'est requise. Ces outils sont peu gourmands en ressources et permettent d'économiser du temps et de l'argent. Vous pouvez extraire des millions de pages en fonction de vos besoins sans vous soucier de la bande passante du réseau. Certains sites web mettent en place des anti-bots qui découragent les scrappeurs de collecter des données. Mais les bons outils de web scraping ont des fonctions intégrées qui leur permettent de contourner ces outils et d'offrir une expérience de scraping transparente.

Le scraping web en Python

Python dispose d'excellents outils pour extraire les données du web. Par exemple, vous pouvez importer la bibliothèque requests pour récupérer le contenu d'une page web et bs4(BeautifulSoup) pour extraire les informations pertinentes. Vous pouvez suivre les étapes ci-dessous pour faire du web scrape en Python. Nous allons extraire des informations de ce site web. 

Demandes d'importation :

Vous devez importer la bibliothèque de requêtes pour récupérer le code HTML du site web. 

demandes d'importation

Demande GET :

Vous devez envoyer une requête GET au site web. Vous pouvez le faire en collant l'URL dans la fonction requests.get().

r = requests.get('http://www.cleveland.com/metro/index.ssf/2017/12/case_western_reserve_university_president_barbara_snyders_base_salary_and_bonus_pay_tops_among_private_colleges_in_ohio.html')

Extraire le contenu :

Extraire le contenu du site web en utilisant r.content. Il donne le contenu du site web en octets. 

c = r.content

Importer BeautifulSoup :

Vous devez importer la bibliothèque BeautifulSoup, qui permet de récupérer facilement des informations sur les pages web.

from bs4 import BeautifulSoup

Créer un objet soupe :

Vous devez créer un objet BeautifulSoup à partir du contenu et l'analyser à l'aide de plusieurs méthodes.

soupe = BeautifulSoup(c)
print(soup.get_text())

Vous obtiendrez un résultat (ce n'est qu'une partie) semblable à celui-ci.

Extraire des données utiles :

Nous devons trouver les bons sélecteurs CSS pour extraire les données souhaitées. Nous pouvons trouver le contenu principal de la page web en utilisant la méthode .find() de l'objet soupe.

main_content = soup.find('div', attrs = {'class': 'entry-content'})

Utiliser l'attribut .text :

Nous pouvons récupérer les informations sous forme de texte à partir du tableau en utilisant l'attribut .text de la soupe.

content = main_content.find('ul').text
print(content)

Nous avons récupéré le texte du tableau sous la forme d'une chaîne. Mais les informations seront très utiles si nous extrayons les parties spécifiques de la chaîne de texte. Pour ce faire, nous devons passer aux expressions régulières.

Expressions régulières en Python

Les expressions régulières (RegEx) sont une séquence de motifs qui définissent un modèle de recherche. L'idée de base est la suivante :

  • Définissez un modèle que vous souhaitez faire correspondre à une chaîne de texte. 
  • Recherche dans la chaîne de caractères pour obtenir des correspondances.

Supposons que nous voulions extraire les informations suivantes du tableau de texte.

  • Salaires
  • Noms des collèges
  • Noms des présidents

Vous pouvez extraire ces trois informations en suivant les étapes mentionnées ci-dessous.

Étape 01 :

Importez re et pour extraire les salaires, vous devez créer un modèle de salaire. Utilisez la méthode re.compile() pour compiler un motif d'expression régulière fourni sous la forme d'une chaîne de caractères en un objet RegEx pattern. En outre, vous pouvez utiliser pattern.findall() pour trouver toutes les correspondances et les renvoyer sous la forme d'une liste de chaînes de caractères. Chaque chaîne représente une correspondance.

import re
salary_pattern = re.compile(r'\$.+')
salaries = salary_pattern.findall(content)

Étape 02 :

Répétez la même procédure pour extraire les noms des collèges. Créez un modèle et extrayez les noms. 

school_pattern = re.compile(r'(?:,|,\s)([A-Z]{1}.*?)(?:\s\(|:|,)')
schools = school_pattern.findall(content)
print(schools)
print(salaries)

Étape 03 :

Répétez la même procédure pour extraire les noms des présidents. Faites un modèle et extrayez les noms demandés. 

name_pattern = re.compile(r'^([A-Z]{1}.+?)(?:,)', flags = re.M)
names = name_pattern.findall(content)
print(names)

Étape 04 :

Les salaires ont l'air désordonnés et ne sont pas compréhensibles. Nous utilisons donc la compréhension de liste de Python pour convertir les chaînes de salaires en nombres. Nous utiliserons le découpage de chaînes, le fractionnement et la jointure, ainsi que la compréhension de liste pour obtenir les résultats souhaités.

salaires = ['$876,001', '$543,903', '$2453,896']
[int(''.join(s[1:].split(','))) pour s dans salaires]

Le résultat est le suivant :

Visualisation de données en Python

La visualisation des données vous aide à comprendre visuellement les données afin de mettre en évidence les tendances, les modèles et les corrélations. Vous pouvez traduire une grande quantité de données en graphiques, diagrammes et autres éléments visuels afin d'identifier les valeurs aberrantes et d'obtenir des informations précieuses.

Nous pouvons utiliser matplotlib pour visualiser les données, comme indiqué ci-dessous.

Importez les bibliothèques nécessaires comme indiqué ci-dessous.

import pandas as pd
import matplotlib.pyplot as plt

Créez un cadre de données pandas contenant les écoles, les noms et les salaires. Par exemple, vous pouvez convertir les écoles en un cadre de données comme suit :

df_school = pd.DataFrame(schools)
print(df_school)

Le résultat est le suivant :

Vous pouvez faire de même pour les salaires et les noms.

Pour visualiser les données, nous pouvons tracer un graphique à barres comme indiqué ci-dessous.

df.plot(kind='barh', x = 'President', y = 'salary')

Le résultat est le suivant :

Pourquoi proxys est-il nécessaire pour le Web Scraping ?

Le web scraping aide les entreprises à extraire des informations utiles sur les marchés et les industries afin d'offrir des services basés sur les données et de prendre des décisions basées sur les données. proxys est essentiel pour extraire des données de différents sites web pour les raisons suivantes.

  • Éviter les interdictions d'IP - Pour empêcher les "scrapers" d'effectuer un trop grand nombre de requêtes, les sites web commerciaux limitent la quantité de données explorables, appelée "taux d'exploration". Le taux de crawl ralentit la vitesse du site web et il devient difficile pour l'utilisateur d'accéder efficacement au contenu souhaité. Toutefois, si vous utilisez un pool suffisant de proxys pour récupérer les données, vous dépasserez les limites du taux de crawl sur le site web cible. En effet, les proxys envoient des requêtes à partir de différentes adresses IP, ce qui vous permet d'extraire les données des sites web en fonction de vos besoins.
  • Permettre l'accès à des contenus spécifiques à une région - Les entreprises doivent surveiller leurs concurrents (sites web) pour fournir des caractéristiques de produits et des prix appropriés aux clients d'une région géographique spécifique. Elles peuvent accéder à tout le contenu disponible dans cette région en utilisant le site résidentiel proxys avec des adresses IP.
  • Sécurité renforcée - Un serveur proxy ajoute une couche supplémentaire de sécurité en masquant l'adresse IP de l'appareil de l'utilisateur.

Savez-vous combien de proxys sont nécessaires pour obtenir les avantages susmentionnés ? Vous pouvez calculer le nombre requis de proxys à l'aide de la formule suivante :

Nombre de proxys = Nombre de demandes d'accès / Taux d'exploration

Le nombre de demandes d'accès dépend des paramètres suivants.

  • La fréquence à laquelle le scraper extrait des informations d'un site web
  • Nombre de pages que l'utilisateur souhaite récupérer

D'autre part, le taux d'exploration est limité par le nombre de requêtes effectuées par l'utilisateur dans un certain laps de temps. Certains sites web autorisent un nombre limité de requêtes par utilisateur afin de différencier les requêtes automatisées des requêtes humaines. 

Utilisation de proxys en Python

Vous pouvez utiliser proxys en Python en suivant les étapes ci-dessous.

  • Vous devez importer le module de requêtes de Python.
demandes d'importation
  • Vous pouvez créer un pool de proxys pour les faire tourner.
proxy = 'http://114.121.248.251:8080'
url = 'https://ipecho.net/plain'
  • Vous pouvez utiliser requests.get() pour envoyer une requête GET en passant un proxy comme paramètre de l'URL.
page = requests.get(url,
                    proxies={"http": proxy, "https": proxy})
  • Vous pouvez obtenir le contenu de l'URL demandée s'il n'y a pas d'erreur de connexion.
imprimer(page.texte)

Le résultat est le suivant :

Conclusion

Nous avons vu qu'il est possible d'utiliser le web scraping pour extraire des données de sites web au lieu d'utiliser le scraping manuel. Le web scraping est un processus rentable qui permet de gagner du temps. Les entreprises l'utilisent pour collecter et restructurer des informations sur le web afin de prendre des décisions fondées sur des données et d'obtenir des informations précieuses. L'utilisation de proxys est essentielle pour un web scraping sûr, car elle masque l'adresse IP d'origine de l'utilisateur du site web cible. Vous pouvez utiliser le centre de données ou le site résidentiel proxys pour le web scraping. Mais préférez l'utilisation de proxys résidentiel car ils sont rapides et ne peuvent pas être facilement détectés. En outre, nous pouvons utiliser des expressions régulières en Python pour faire correspondre ou trouver des ensembles de chaînes. Cela signifie que nous pouvons extraire n'importe quel motif de chaîne du texte à l'aide d'expressions régulières. Nous avons également vu que la visualisation des données permet de convertir de grandes quantités de données en tableaux, graphiques et autres éléments visuels qui nous aident à détecter les anomalies et à identifier les tendances utiles dans les données.