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
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 usardesde/hasta: Rango de fechascategory: 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 oradororgan: Tipo de órgano ("Pleno", "Comision")legislature: Número de legislaturastart_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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
487d376aeac071c59d7cbe6b51e7be036ea0c08932f74653f6357c4283801487
|
|
| MD5 |
8a3f8d95d35486578981b69adc4738eb
|
|
| BLAKE2b-256 |
c4801bbf61fa032405fdea67c3192b68d8fbe69fbc92f3a6c13eec80a7edf877
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f7520ebd5dffb049f2be9dc3a288a0fd1aebf0a97f7c5164c082057c92d7f7b2
|
|
| MD5 |
c4bb0458fa3c3feb09fcff4b430bbd64
|
|
| BLAKE2b-256 |
41094634c9239972d933f69bf5d9714155b880ecbd783f6253b6ab0732801839
|