Script Acceso Libre 20 Feb, 2026

Script Python: Web Scraper con BeautifulSoup + exportación CSV

Scraper reutilizable con requests + BeautifulSoup4. Incluye manejo de paginación, rate limiting, headers rotativos y exportación a CSV con pandas.

#python #scraping #beautifulsoup #csv #pandas

Contenido

Web Scraper Profesional en Python

Un scraper robusto y reutilizable, no el típico ejemplo de 10 líneas que no funciona en producción.

Código completo

import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
import random

class WebScraper:
    def __init__(self, base_url, delay_range=(1, 3)):
        self.base_url = base_url
        self.delay_range = delay_range
        self.session = requests.Session()
        self.session.headers.update({
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)',
            'Accept-Language': 'es-ES,es;q=0.9',
        })
        self.data = []

    def fetch_page(self, url):
        """Obtiene una página con retry y rate limiting"""
        for attempt in range(3):
            try:
                time.sleep(random.uniform(*self.delay_range))
                response = self.session.get(url, timeout=10)
                response.raise_for_status()
                return BeautifulSoup(response.text, 'html.parser')
            except requests.RequestException as e:
                print(f"Intento {attempt + 1} fallido: {e}")
                if attempt == 2:
                    raise

    def parse_item(self, element):
        """Override este método para tu caso específico"""
        return {
            'title': element.select_one('.title').text.strip(),
            'price': element.select_one('.price').text.strip(),
            'url': element.select_one('a')['href'],
        }

    def scrape(self, pages=5):
        for page in range(1, pages + 1):
            url = f"{self.base_url}?page={page}"
            print(f"Scraping página {page}...")
            soup = self.fetch_page(url)
            items = soup.select('.product-item')
            for item in items:
                self.data.append(self.parse_item(item))
        return self

    def to_csv(self, filename='output.csv'):
        df = pd.DataFrame(self.data)
        df.to_csv(filename, index=False, encoding='utf-8')
        print(f"Exportado: {len(df)} registros → {filename}")
        return df

Uso

scraper = WebScraper('https://ejemplo.com/productos')
df = scraper.scrape(pages=10).to_csv('productos.csv')
print(df.describe())

Recurso Externo

Este recurso incluye un enlace externo. Regístrate para acceder.

Inicia Sesión para Acceder

Únete a la Comunidad

Regístrate gratis para descargar archivos, guardar recursos en favoritos, ganar XP y acceder a cursos y el foro de la comunidad.

¿Ya tienes cuenta? Inicia sesión

Erik Taveras

Autor

Erik Taveras

Recursos Relacionados