Scraper Web Python avancé

Créez un scraper Web avancé en Python. Apprenez à extraire des données de page, à gérer les blocs d'agent utilisateur, à gérer les limites de débit et à structurer les sorties.

Essayez dans l'éditeur

Aperçu

Le web scraping consiste à récupérer des pages Web par programme et à analyser leur structure HTML pour extraire des données spécifiques. En Python, cela est traditionnellement accompli en utilisant « requests » et « BeautifulSoup ».

Les grattoirs avancés nécessitent une configuration robuste. La simple demande de pages peut entraîner des blocages ou des interdictions IP, nécessitant une personnalisation des en-têtes comme des agents utilisateurs personnalisés et l'introduction d'intervalles de retard aléatoires.

Cet exemple interactif imite le scraping de données fictives avec validation. Il montre comment localiser les conteneurs imbriqués, gérer les délais d'attente du réseau et structurer les données de sortie en listes propres.

Sortie de code et d'exécution

Une routine de scraping Web comprenant des en-têtes personnalisés, une gestion des délais d'attente et des structures d'analyseur HTML.

import requests
from bs4 import BeautifulSoup
import time

def scrape_quotes():
    # Mock URL designed for scraping practice
    url = "https://quotes.toscrape.com/"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
    }
    
    print(f"Initiating request to: {url}...")
    try:
        # Request with timeout protection
        response = requests.get(url, headers=headers, timeout=5)
        response.raise_for_status()
        
        soup = BeautifulSoup(response.text, "html.parser")
        quotes = soup.find_all("div", class_="quote", limit=3)
        
        results = []
        for q in quotes:
            text = q.find("span", class_="text").text
            author = q.find("small", class_="author").text
            tags = [t.text for t in q.find_all("a", class_="tag")]
            results.append({
                "quote": text,
                "author": author,
                "tags": tags
            })
            
        print("Scrape completed successfully!\n")
        for idx, item in enumerate(results):
            print(f"Quote {idx+1}: {item['quote']}")
            print(f"  Author: {item['author']}")
            print(f"  Tags:   {', '.join(item['tags'])}\n")
            
    except requests.exceptions.RequestException as e:
        print(f"Network error occurred: {e}")

scrape_quotes()
Sortie terminale
Initiating request to: https://quotes.toscrape.com/...
Scrape completed successfully!

Quote 1: “The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”
  Author: Albert Einstein
  Tags:   change, deep-thoughts, thinking

Quote 2: “It is our choices, Harry, that show what we truly are, far more than our abilities.”
  Author: J.K. Rowling
  Tags:   abilities, choices

Quote 3: “There are only two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle.”
  Author: Albert Einstein
  Tags:   inspirational, life, live, miracle

Mise en œuvre étape par étape

  • Surveillance et suivi des prix sur les catalogues d'achats
  • Analyse des sentiments en collectant les données d'avis des forums
  • Création de jeux de données de recherche universitaire

Foire aux questions

Qu'est-ce que robots.txt ?

Un fichier texte placé à la racine d'un domaine indiquant quels chemins les robots de recherche et les robots d'exploration sont autorisés ou interdits à explorer. Vous devriez toujours le lire avant d'écrire un scraper.

Comment puis-je récupérer des pages rendues dynamiquement via JavaScript ?

Les requêtes standard récupèrent uniquement le HTML statique. Pour analyser les pages contenant beaucoup de Javascript, vous devez utiliser des outils d'automatisation de navigateur tels que Playwright ou Selenium.

Sujets connexes