Skip to main content

Librería Python para acceder a datos públicos del Congreso de los Diputados de España y periódicos españoles (diputados, votaciones, noticias de política).

Project description

congreso-ia

PyPI version Python 3.9+ License: MIT

Librería Python para acceder a datos públicos del Congreso de los Diputados de España y periódicos españoles. Extrae diputados, votaciones, iniciativas, intervenciones y noticias de política.

Instalación

pip install congreso-ia

🗞️ Scraper de Periódicos (Nuevo!)

Scrapea noticias de 11 periódicos españoles con funcionalidades avanzadas:

  • Categorías dinámicas - Descubre secciones automáticamente
  • Caché - SQLite persistente o en memoria
  • Filtrado por fechas - Rango desde/hasta
  • Descarga de imágenes - Guardado local configurable

Periódicos Disponibles

Periódico Clave
El País elpais
El Mundo elmundo
elDiario.es eldiario
ABC abc
La Vanguardia lavanguardia
El Confidencial elconfidencial
Público publico
La Razón larazon
20 Minutos 20minutos
El Periódico elperiodico
InfoLibre infolibre

Uso Básico

from congreso_ia.newspapers import NewspaperClient

with NewspaperClient() as client:
    # Noticias de política de todos los periódicos
    articles = client.fetch_politics(limit_per_source=5)
    
    for article in articles:
        print(f"{article.source}: {article.title}")

Categorías Dinámicas

# Descubrir categorías disponibles (scrapeadas del menú)
categories = client.discover_categories("elpais")
# {'internacional': '/internacional/', 'economía': '/economia/', ...}

# Scrapear una categoría específica
articles = client.fetch_category("elpais", "economía", limit=10)

Filtrado por Fechas

from datetime import date

articles = client.fetch_politics(
    limit_per_source=20,
    desde=date(2024, 1, 1),
    hasta=date(2024, 1, 31)
)

Sistema de Caché

# Caché SQLite (persistente entre sesiones)
client = NewspaperClient(cache="./cache/articles.db")

# Caché en memoria (solo sesión actual)
from congreso_ia.cache import MemoryCache
client = NewspaperClient(cache=MemoryCache(ttl_hours=1))

Descarga de Imágenes

client = NewspaperClient(
    download_images=True,
    images_dir="./data/images/"
)

article = client.fetch_article("https://elpais.com/...")
print(article.image_local_path)  # "./data/images/abc123.jpg"

🏛️ Datos del Congreso

API Python

from congreso_ia import CongressClient

client = CongressClient()

# Obtener todos los diputados activos
deputies = client.get_deputies()
print(f"{len(deputies)} diputados")

# Filtrar por partido
pp_deputies = client.get_deputies(party="PP")

# Obtener votaciones recientes
votes = client.get_votes()

# Obtener iniciativas
initiatives = client.get_initiatives()

# Buscar intervenciones de un diputado
interventions = client.get_interventions(speaker="Pedro Sanchez")
print(f"{len(interventions)} intervenciones")

# Filtrar por órgano y fecha
from datetime import date
pleno = client.get_interventions(
    speaker="Feijoo",
    organ="Pleno",
    start_date=date(2024, 1, 1)
)

Ejecución paralela con rate limiting

from congreso_ia import CongressClient, parallel_fetch

client = CongressClient()

# Buscar intervenciones de múltiples diputados en paralelo
speakers = ["Sanchez", "Feijoo", "Abascal", "Diaz"]

results = parallel_fetch(
    func=lambda s: client.get_interventions(speaker=s),
    items=speakers,
    max_workers=4,
    requests_per_second=2.0,
    on_progress=lambda done, total, r: print(f"{done}/{total}")
)

for r in results:
    if r.success:
        print(f"{r.item}: {len(r.result)} intervenciones")

Exportar a DataFrame

from congreso_ia import interventions

# Obtener como pandas DataFrame
df = interventions.fetch(speaker="Abascal", as_df=True)

# Exportar a CSV
df.to_csv("intervenciones_abascal.csv", index=False)

CLI

# Descargar votaciones recientes
congreso scrape votes --latest

# Descargar intervenciones de una legislatura
congreso scrape interventions --legislature 15

# Exportar a diferentes formatos
congreso scrape votes --format parquet
congreso scrape votes --format csv

Datos disponibles

Recurso Método Campos principales
Diputados get_deputies() nombre, partido, circunscripción, grupo, email
Votaciones get_votes() fecha, título, resultado, votos individuales
Iniciativas get_initiatives() título, tipo, autor, expediente
Intervenciones get_interventions() orador, fecha, órgano, tema, video_url
Artículos NewspaperClient título, fuente, fecha, contenido, imagen

Filtros

Periódicos

  • sources: Lista de periódicos a usar
  • desde / hasta: Rango de fechas
  • category: Categoría específica (economía, internacional, etc.)

Diputados

  • party: Filtrar por partido (ej. "PP", "PSOE")
  • constituency: Filtrar por circunscripción

Intervenciones

  • speaker: Nombre del orador
  • organ: Tipo de órgano ("Pleno", "Comision")
  • legislature: Número de legislatura
  • start_date / end_date: Rango de fechas

Ejemplos

Ver la carpeta examples/ para más ejemplos:

python examples/demo_advanced_features.py  # Demo de periódicos
python examples/test_all_newspapers.py      # Probar todos los scrapers
python examples/fetch_deputies.py
python examples/fetch_votes.py

Desarrollo

# Clonar repositorio
git clone https://github.com/congreso-ia/congreso-ia-scraper.git
cd congreso-ia-scraper

# Instalar en modo desarrollo
pip install -e ".[dev]"

# Ejecutar tests
pytest

# Linter
ruff check .

Disclaimer Legal

Este proyecto no es una fuente oficial del Congreso de los Diputados ni de ningún periódico. Es una herramienta de código abierto que utiliza exclusivamente fuentes públicas. El uso de esta herramienta debe cumplir con los términos de servicio de cada sitio web.

Licencia

Distribuido bajo la licencia MIT. Ver LICENSE para más información.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

congreso_ia-0.2.0.tar.gz (58.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

congreso_ia-0.2.0-py3-none-any.whl (69.1 kB view details)

Uploaded Python 3

File details

Details for the file congreso_ia-0.2.0.tar.gz.

File metadata

  • Download URL: congreso_ia-0.2.0.tar.gz
  • Upload date:
  • Size: 58.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.5

File hashes

Hashes for congreso_ia-0.2.0.tar.gz
Algorithm Hash digest
SHA256 487d376aeac071c59d7cbe6b51e7be036ea0c08932f74653f6357c4283801487
MD5 8a3f8d95d35486578981b69adc4738eb
BLAKE2b-256 c4801bbf61fa032405fdea67c3192b68d8fbe69fbc92f3a6c13eec80a7edf877

See more details on using hashes here.

File details

Details for the file congreso_ia-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: congreso_ia-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 69.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.5

File hashes

Hashes for congreso_ia-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f7520ebd5dffb049f2be9dc3a288a0fd1aebf0a97f7c5164c082057c92d7f7b2
MD5 c4bb0458fa3c3feb09fcff4b430bbd64
BLAKE2b-256 41094634c9239972d933f69bf5d9714155b880ecbd783f6253b6ab0732801839

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page