Skip to content
Tutoriels
Python
Python Rendez Beautiful Soup plus Rapide : Améliorez l'efficacité de votre extraction de données Web dès maintenant !

Python Rendez Beautiful Soup plus Rapide : Améliorez l'efficacité de votre extraction de données Web dès maintenant !

Le scraping web est un outil puissant dans l'arsenal du data scientist. Il nous permet d'extraire et de manipuler des données à partir du Web, ce qui ouvre un large éventail d'applications. Une des bibliothèques les plus populaires pour le scraping web en Python est Beautiful Soup. Cependant, comme avec tout outil, il peut y avoir des problèmes de performances. Dans cet article, nous allons explorer comment rendre Beautiful Soup plus rapide, en améliorant l'efficacité de votre extraction de données web.

Beautiful Soup est une bibliothèque Python utilisée à des fins de scraping web pour extraire des données à partir de fichiers HTML et XML. Elle crée un arbre d'analyse à partir du code source de la page, ce qui permet d'extraire les données de manière hiérarchique et plus lisible. Cependant, Beautiful Soup peut parfois être lent. Cela peut poser problème lorsque l'on travaille avec de grandes quantités de données ou lors de l'exécution d'opérations complexes de scraping web.

Vous souhaitez créer rapidement des visualisations de données à partir d'un DataFrame Python Pandas sans code ?

PyGWalker est une bibliothèque Python pour l'analyse exploratoire de données avec visualisation. PyGWalker (opens in a new tab) peut simplifier votre flux de travail d'analyse de données et de visualisation de données dans Jupyter Notebook en transformant votre DataFrame pandas (et votre DataFrame polars) en une interface utilisateur de type Tableau pour l'exploration visuelle.

PyGWalker pour la visualisation des données (opens in a new tab)

Rendez Beautiful Soup plus Rapide en Utilisant Différents Analyseurs

Une des façons d'accélérer Beautiful Soup est d'utiliser un analyseur différent. Beautiful Soup prend en charge plusieurs analyseurs, mais les plus courants sont l'analyseur HTML intégré de Python et lxml. Selon la première source, l'utilisation de lxml peut rendre l'analyse Beautiful Soup 10 fois plus rapide. Cela est dû au fait que lxml est écrit en C et peut donc exécuter plus d'opérations par seconde que Python. Pour utiliser lxml avec Beautiful Soup, il suffit de l'installer (en utilisant pip install lxml) et de le spécifier lors de la création de l'objet Beautiful Soup :

from bs4 import BeautifulSoup
soup = BeautifulSoup(html_content, 'lxml')

Rendez Beautiful Soup plus Rapide avec des Bibliothèques de Mise en Cache

La mise en cache est une technique utilisée pour stocker des données dans une zone de stockage temporaire, également appelée cache, afin de pouvoir y accéder plus rapidement à l'avenir. En ce qui concerne le scraping web, la mise en cache peut améliorer considérablement les performances de BeautifulSoup.

L'une des bibliothèques de mise en cache les plus populaires en Python est requests-cache. Elle fournit une couche de mise en cache transparente pour les requêtes. Voici un exemple de son utilisation avec BeautifulSoup :

import requests
import requests_cache
from bs4 import BeautifulSoup
 
# Création d'un cache qui dure 24 heures
requests_cache.install_cache('my_cache', expire_after=86400)
 
# Utilisation de requests comme d'habitude
url = "http://example.com"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'lxml')

Dans cet exemple, la première fois que vous exécutez le script, requests-cache stockera le résultat dans 'my_cache'. Si vous exécutez à nouveau le script dans les 24 heures, requests-cache utilisera le résultat mis en cache, ce qui rendra le script plus rapide.

Rendez Beautiful Soup plus Rapide avec des CDN et des Serveurs Proxy

Un réseau de diffusion de contenu (CDN) est un réseau distribué géographiquement composé de serveurs proxy et de leurs centres de données. L'objectif est de fournir une haute disponibilité et des performances en distribuant le service spatialement par rapport aux utilisateurs finaux. En ce qui concerne BeautifulSoup, un CDN peut contribuer à améliorer les performances en réduisant la latence des requêtes.

Un serveur proxy est un serveur qui fait office d'intermédiaire pour les requêtes des clients qui cherchent à accéder à des ressources provenant d'autres serveurs. Lorsqu'il est utilisé avec BeautifulSoup, un serveur proxy peut contribuer à améliorer les performances en équilibrant la charge des requêtes.

Voici un exemple d'utilisation d'un serveur proxy avec BeautifulSoup :

import requests
from bs4 import BeautifulSoup
 
proxies = {
  'http': 'http://10.10.1.10:3128',
  'https': 'http://10.10.1.10:1080',
}
 
url = "http://example.com"
response = requests.get(url, proxies=proxies)
soup = BeautifulSoup(response.text, 'lxml')

Dans cet exemple, les requêtes sont envoyées via le serveur proxy spécifié dans le dictionnaire proxies. Cela peut contribuer à équilibrer la charge des requêtes et à améliorer les performances de BeautifulSoup.

Segment 5 : Optimisation de BeautifulSoup avec le Multithreading

Le multithreading est une technique qui permet à un ensemble de code unique d'être utilisé par plusieurs processeurs à différentes étapes d'exécution. Cela peut améliorer considérablement les performances de vos opérations BeautifulSoup, notamment lorsqu'il s'agit de traiter de grandes quantités de données ou d'exécuter des opérations complexes de scraping web.

En Python, vous pouvez utiliser le module concurrent.futures pour créer un pool de threads, chacun pouvant exécuter une instance séparée de votre opération BeautifulSoup. Voici un exemple :

import requests
from bs4 import BeautifulSoup
from concurrent.futures import ThreadPoolExecutor
 
def fetch_url(url):
   
 
 response = requests.get(url)
    return response.text
 
def parse_html(html):
    soup = BeautifulSoup(html, 'lxml')
    # Effectuez ici vos opérations BeautifulSoup
 
urls = ["http://example.com/page1", "http://example.com/page2", "http://example.com/page3"]
 
with ThreadPoolExecutor(max_workers=5) as executor:
    htmls = executor.map(fetch_url, urls)
    for html in htmls:
        parse_html(html)

Dans cet exemple, ThreadPoolExecutor crée un pool de 5 threads. La fonction map applique ensuite la fonction fetch_url à chaque URL de la liste urls, répartissant ainsi le travail entre les threads du pool. Cela permet de récupérer et d'analyser plusieurs URLs simultanément, accélérant ainsi l'opération globale.

FAQ

1. Quels sont les différents analyseurs pris en charge par Beautiful Soup ?

Beautiful Soup prend en charge différents analyseurs, les plus courants étant 'html.parser', 'lxml', 'xml' et 'html5lib'. L'analyseur 'lxml' est réputé pour sa rapidité et son efficacité, tandis que 'html5lib' analyse le HTML de la même manière qu'un navigateur web.

2. Comment rendre Beautiful Soup plus rapide ?

Il existe plusieurs façons de rendre Beautiful Soup plus rapide. L'une d'elles consiste à utiliser un analyseur plus rapide comme 'lxml'. Une autre solution consiste à utiliser une bibliothèque de mise en cache comme 'requests-cache' pour mettre en cache les résultats des requêtes. Vous pouvez également utiliser un CDN ou un serveur proxy pour réduire la latence des requêtes.

3. Est-ce que l'utilisation d'une bibliothèque de mise en cache améliore réellement les performances ?

Oui, l'utilisation d'une bibliothèque de mise en cache peut considérablement améliorer les performances de BeautifulSoup. Une bibliothèque de mise en cache comme 'requests-cache' permet de stocker les résultats des requêtes dans un cache, ce qui permet d'y accéder plus rapidement à l'avenir.