Tutoriel sur le Web Scraping avec Python : Conseils et astuces

Python, Scraping, Dec-31-20215 minutes de lecture

Vous pouvez extraire automatiquement de grandes quantités de données de sites web à l'aide du web scraping et les enregistrer dans une base de données ou un fichier. Les données extraites peuvent être stockées dans une feuille de calcul ou dans un format tabulaire. Le web scraping est également appelé web data extraction ou web harvesting. Il est nécessaire car le scraping manuel est une tâche fastidieuse

Table des matières

Vous pouvez extraire automatiquement de grandes quantités de données de sites web à l'aide du web scraping et les enregistrer dans une base de données ou un fichier. Les données extraites peuvent être stockées dans une feuille de calcul ou dans un format tabulaire. Le web scraping est également appelé web data extraction ou web harvesting. Il est nécessaire parce que le scraping manuel est une tâche fastidieuse qui peut prendre des heures, voire des jours. Il faut donc automatiser le processus et extraire les données des sites web en une fraction de temps.

Vous pouvez utiliser un logiciel de web scraping pour charger, explorer et extraire automatiquement les données des différentes pages d'un site web en fonction de vos besoins et de vos exigences. En bref, vous pouvez obtenir les données souhaitées à partir de sites web en cliquant sur un bouton. Dans le monde moderne, les entreprises ont besoin d'analyser les données et d'effectuer des actions intelligentes. Mais il est parfois difficile d'obtenir des données à partir de sites web lorsque les propriétaires de ces derniers utilisent des techniques telles que les interdictions d'IP et les CAPTCHA. Vous pouvez utiliser des serveurs proxy ou des VPN pour surmonter ce problème, car ils vous aident à récupérer des données sur le web de manière anonyme. 

Pourquoi le Web Scraping est-il nécessaire ?

Les entreprises du monde entier récupèrent des données sur le web pour obtenir des informations utiles en les stockant dans un format utilisable. Voici quelques-uns des avantages du web scraping dans divers secteurs d'activité.

  • Le web scraping permet de collecter des ensembles de données de formation et de test pour les projets d'apprentissage automatique.
  • Dans le domaine du commerce électronique, le web scraping est utilisé pour surveiller les prix pratiqués par les concurrents.
  • Le web scraping est utilisé dans l'immobilier pour obtenir des informations sur les biens et les propriétaires/agents.
  • Dans le domaine du marketing, le web scraping est utilisé pour établir des listes de numéros de téléphone et d'adresses électroniques en vue d'une prospection à froid.

Voici les principales raisons de récupérer des données sur le web.

Automatisation - Vous pouvez extraire des données de sites web en utilisant des scrappeurs web robustes. Vous pouvez ainsi gagner du temps sur les tâches banales de collecte de données. Vous pouvez collecter des données à un volume supérieur à celui qu'un seul être humain pourrait espérer atteindre avec le web scraping. En outre, vous pouvez également créer des robots web sophistiqués pour automatiser les activités en ligne en utilisant un langage de programmation tel que Python, Javascript ou en utilisant un outil de web scraping.

Des ensembles de données riches et uniques - Vous pouvez obtenir une grande quantité d'images, de vidéos, de textes et de données numériques sur l'internet. Vous pouvez également trouver des sites web pertinents et créer votre propre ensemble de données pour l'analyse, en fonction de votre objectif. Par exemple, vous souhaitez comprendre en profondeur le marché du sport au Royaume-Uni. Vous pouvez mettre en place des racleurs de sites web pour recueillir le contenu vidéo ou les informations sur les statistiques du football pour vous.

Gestion efficace des données - Vous n'avez pas besoin de copier et de coller des données provenant d'Internet, car vous pouvez collecter avec précision des données provenant de divers sites Web grâce au web scraping. De cette manière, votre entreprise et vos employés peuvent consacrer plus de temps à leur travail créatif en stockant efficacement les données à l'aide de logiciels et de programmes automatiques.

Business Intelligence et Insights - Le Web scraping à partir d'Internet vous permet de faire ce qui suit :

  • Suivi de l'activité marketing des concurrents
  • Recherche des prix des concurrents
  • Obtenir une vue d'ensemble de votre marché

En outre, les entreprises peuvent prendre de meilleures décisions en téléchargeant, en nettoyant et en analysant un volume important de données.

Rapidité - Le web scraping permet d'extraire des données de sites web à grande vitesse. Il vous permet d'extraire des données en quelques heures au lieu de quelques jours. Cependant, certains projets peuvent prendre du temps en fonction de leur complexité et des ressources et outils que nous utilisons pour les réaliser.

Précision des données - L'extraction manuelle de données à partir de sites web implique des erreurs humaines, ce qui entraîne de graves problèmes. C'est pourquoi l'extraction de données précises est cruciale pour toute information, ce qui peut être réalisé grâce au web scraping.

Le scraping web en Python

Supposons que vous deviez extraire des données de ce site web. Vous devrez installer les deux modules Python suivants : requests et BeautifulSoup. 

Importer des bibliothèques

Vous pouvez installer ces modules en utilisant la commande suivante.

!pip install requests
!pip install BeautifulSoup

Vous pouvez importer ces modules en tant que :

from bs4 import BeautifulSoup
import requests

Vous pouvez cliquer sur le bouton Inspecter dans le coin supérieur gauche du site web pour mettre en évidence les éléments que vous souhaitez extraire. Dans notre cas, nous voulons extraire les données du tableau de ce site, comme indiqué ci-dessous.

Ajouter l'en-tête et l'URL

Vous devez ajouter l'en-tête et l'URL à vos demandes. L'en-tête permet d'alléger votre demande pour qu'elle ait l'air de provenir d'un navigateur légitime. 

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36'}

url = "https://en.wikipedia.org/wiki/List_of_national_capitals"

Vous pouvez utiliser la fonction requests.get() pour envoyer une requête GET à l'URL spécifiée.

r = requests.get(url, headers=headers)

Objet BeautifulSoup

Vous devez initialiser un objet BeautifulSoup et mentionner ses paramètres. Ensuite, vous devez extraire toutes les lignes du tableau. Vous pouvez obtenir tous les éléments du tableau en utilisant la méthode find_all() comme indiqué dans le code ci-dessous.

soup = BeautifulSoup(r.content, "html.parser")
table = soup.find_all('table')[1]
rows = table.find_all('tr')
row_list = list()

Itération à travers les lignes

Vous pouvez utiliser une boucle for pour parcourir toutes les lignes du tableau, comme le montre le code ci-dessous.

pour tr dans les lignes :
   td = tr.find_all('td')
    row = [i.text for i in td]
    row_list.append(row)

Créer un cadre de données

Vous pouvez visualiser clairement les données extraites en créant un cadre de données Pandas et en exportant vos données dans un fichier .csv. Pour créer un cadre de données, vous devez importer Pandas, comme indiqué ci-dessous.

import pandas as pd

Vous pouvez maintenant convertir votre objet soupe en un cadre de données qui contiendra les lignes de tableau suivantes.

  • Ville
  • Pays
  • Notes

Vous pouvez convertir votre cadre de données au format csv et l'imprimer comme indiqué ci-dessous.

df_bs = pd.DataFrame(row_list,columns=['City', 'Country','Notes'])
df_bs.set_index('Pays',inplace=True)
df_bs.to_csv('beautifulsoup.csv')
print(df_bs)

Vous obtiendrez le résultat suivant.

proxys Pour le Web Scraping à l'aide de Python

Un proxy agit comme un intermédiaire entre un client et un serveur. Il dissimule votre véritable adresse IP et contourne les filtres et la censure. Vous pouvez obtenir une liste gratuite de proxys en utilisant simplement une fonction en Python, comme indiqué dans les étapes ci-dessous.

Importer des bibliothèques

Vous devez importer les modules ci-dessous dans Python.

from bs4 import BeautifulSoup
import requests
import random

Définir une fonction

Vous pouvez définir une fonction get_free_proxies() dans laquelle vous devez mentionner l'URL de la liste des proxy gratuits. Ensuite, vous devez créer un objet BeautifulSoup et obtenir la réponse HTTP en utilisant la fonction requests.get(). 

def get_free_proxies() :
    url = "https://free-proxy-list.net/"
    soup = bs(requests.get(url).content, "html.parser")
   proxys = []

Utiliser une boucle For

Vous pouvez utiliser la méthode find_all() dans la boucle for pour parcourir toutes les lignes du tableau, comme indiqué ci-dessous.

for row in soup.find("table", attrs={"id": "proxylisttable"}).find_all("tr")[1:]:
        tds = row.find_all("td")
        try:
            ip = tds[0].text.strip()
            port = tds[1].text.strip()
            host = f"{ip}:{port}"
            proxies.append(host)
        except IndexError:
            continue
    return proxies

Liste de travail proxys

Vous pouvez mentionner la liste de quelques proxys qui fonctionnent comme celle que nous avons mentionnée ci-dessous.

proxys = [
    '167.172.248.53:3128',
   '194.226.34.132:5555',
   '203.202.245.62:80',
    '141.0.70.211:8080',
    '118.69.50.155:80',
    '201.55.164.177:3128',
   '51.15.166.107:3128',
   '91.205.218.64:80',
    '128.199.237.57:8080',
]

Demande de session

Vous devez créer une fonction get_session() qui acceptera une liste de proxys et créera une session de demande qui sélectionnera au hasard l'un des proxys transmis, comme le montre le code ci-dessous.

def get_session(proxies):
  session = requests.Session()
  proxy = random.choice(proxies)
  session.proxies = {"http": proxy, "https": proxy}
  return session

Faire une demande

Vous pouvez utiliser une boucle for pour envoyer une requête à un site web et obtenir une adresse IP en retour.

for i in range(5) :
    s = get_session(proxys)
    try :
       print("Request page with IP :", s.get("http://icanhazip.com", timeout=1.5).text.strip())
    except Exception as e :
        continue

Vous pouvez obtenir le résultat suivant.

Pourquoi proxys est-il important pour le Web Scraping ?

Les entreprises peuvent extraire des données précieuses pour prendre des décisions fondées sur des données et offrir des services alimentés par des données grâce au web scraping. proxys est important pour le web scraping pour les raisons suivantes.

  • Avec proxys, vous pouvez faire des requêtes à partir d'une région géographique particulière et voir le contenu spécifique que le site web affiche pour cette localisation donnée. Cette fonctionnalité de proxys est utile lorsque vous récupérez des données sur des produits auprès de détaillants en ligne.
  • proxys vous permettent d'envoyer un plus grand nombre de requêtes à un site web cible sans être bloqué ou banni.
  • proxys vous permettent d'extraire des données de sites web de manière plus fiable et plus efficace.
  • Avec proxys, vous pouvez effectuer un nombre illimité de sessions simultanées sur le même site ou sur des sites différents sans craindre d'être banni.
  • Un proxy cache l'adresse IP de votre machine au site web cible, offrant ainsi une sécurité supplémentaire à votre appareil.
  • Les entreprises utilisent le site proxys pour surveiller les prix et les caractéristiques des produits des concurrents afin d'améliorer leurs services et leurs produits.

Conclusion sur ce tutoriel Python pour le Web Scraping

Jusqu'à présent, nous avons vu que le web scraping nous aide à extraire des données de sites web de manière automatisée. Vous pouvez convertir les données dans un format utilisable, comme un fichier .csv. Les entreprises utilisent le web scraping pour vérifier les prix et les caractéristiques des produits de leurs concurrents. Le web scraping est très utile si vous utilisez proxys , car il préserve l'anonymat de votre identité en cachant votre adresse IP d'origine au site web cible. Avec proxysvous pouvez envoyer plusieurs requêtes au site web sans craindre d'être bloqué ou banni.