Colección de herramientas de scraping y automatización para tareas de ML, Data Science y DevOps, escritas en Python con enfoque en calidad, tests y documentación.
- Portfolio técnico: Demostrar habilidades en scraping, automatización, testing y clean code.
- Reutilizable: Scripts listos para integrar en pipelines de datos o proyectos personales.
- Open-source: Código limpio, con tests y ejemplos.
- Lenguaje: Python 3.11+
- Librerías:
requests/httpx(HTTP)beautifulsoup4/lxml(HTML parsing)selenium(JS-heavy sites)pandas(data processing)pytest(testing)loguru(logging)
- CI/CD: GitHub Actions (tests, lint, security scan)
- Automatización: Bash scripts para deployment rápido.
scraper-utils/
├── src/
│ ├── __init__.py
│ ├── base_scraper.py # Clase base + manejo de errores
│ ├── dynamic_scraper.py # Selenium + headless
│ ├── static_scraper.py # requests + bs4
│ └── utils.py # helpers (rate limiting, retries)
├── tests/
│ ├── test_base.py # Tests de la clase base
│ ├── test_static.py # Tests de scraping estático
│ └── test_dynamic.py # Tests de scraping dinámico
├── examples/
│ ├── scrape_hackernews.py # Ejemplo real: extraer headlines
│ └── scrape_github_top.py # Ejemplo: top repos por lenguaje
├── .github/
│ └── workflows/
│ ├── tests.yml # CI: pytest + lint
│ └── security.yml # TruffleHog: scan de secrets
├── requirements.txt # Dependencias
├── pyproject.toml # Configuración (poetry)
└── README.md # Este archivo-
Clonar:
git clone https://github.com/RanuK12/scraper-utils.git cd scraper-utils -
Instalar:
python -m venv .venv source .venv/bin/activate pip install -r requirements.txt -
Ejecutar un ejemplo:
python examples/scrape_hackernews.py --limit 10
→ Imprime los últimos 10 headlines de Hacker News.
-
Tests:
pytest tests/ -v
from src.utils import RateLimiter, RetryHandler
limiter = RateLimiter(max_requests=5, period=1) # 5 req/seg
retry = RetryHandler(max_retries=3, delay=1) # Retry en fallos
@limiter.limit
@retry.retry
def fetch_page(url):
response = requests.get(url)
return response.textfrom loguru import logger
logger.add("scraper.log", rotation="10 MB")
logger.info("Iniciando scraping...")| Criterio | Estado |
|---|---|
| Tests | 100% coverage (pytest) |
| Linting | PEP8 + flake8 |
| Security | TruffleHog en CI |
| Documentación | Docstrings + README |
| Reproducibilidad | requirements.txt + pyproject.toml |
Bienvenidos PRs con:
- Nuevos scraper templates.
- Mejoras en manejo de errores.
- Optimizaciones de performance.
- Documentación adicional.
MIT License — libre uso, modificación y distribución.