Scraper web avanzado de Python

Cree un raspador web avanzado en Python. Aprenda a extraer datos de páginas, manejar bloques de agentes de usuario, administrar límites de velocidad y estructurar resultados.

Pruébelo en el editor

Descripción general

El web scraping implica buscar páginas web mediante programación y analizar su estructura HTML para extraer datos específicos. En Python, esto se logra tradicionalmente usando "solicitudes" y "BeautifulSoup".

Los raspadores avanzados requieren una configuración sólida. Simplemente solicitar páginas puede resultar en bloqueos o prohibiciones de IP, lo que requiere la personalización de los encabezados, como agentes de usuario personalizados, y la introducción de intervalos de demora aleatorios.

Este ejemplo interactivo imita la extracción de datos simulados con validación. Demuestra cómo ubicar contenedores anidados, manejar tiempos de espera de red y estructurar datos de salida en listas limpias.

Código y salida de ejecución

Una rutina de web scraping que incluye encabezados personalizados, gestión de tiempo de espera y estructuras de analizador 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()
Salida terminal
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

Implementación paso a paso

  • Monitoreo y seguimiento de precios en catálogos de compras.
  • Análisis de sentimiento mediante la recopilación de datos de reseñas de foros.
  • Creación de conjuntos de datos de investigación académica.

Preguntas frecuentes

¿Qué es robots.txt?

Un archivo de texto ubicado en la raíz de un dominio que indica qué rutas de búsqueda pueden o no pueden rastrear los robots y rastreadores. Siempre debes leerlo antes de escribir un raspador.

¿Cómo puedo extraer páginas renderizadas dinámicamente a través de JavaScript?

Las solicitudes estándar solo obtienen HTML estático. Para analizar páginas con mucho Javascript, debe utilizar herramientas de automatización del navegador como Playwright o Selenium.

Temas relacionados