Skip to content

Commit 4f70887

Browse files
refactor: implement full remediation plan
- Rewrite .gitignore from scratch (was corrupted with null bytes) - Purge sensitive/generated files from git history via filter-branch - Remove dead code: checkpoint.py, test_checkpoint.py, unused config key - Fix session.py: release lock before sleeping in _enforce_min_interval - Fix index.py: cache DataFrame to avoid re-reading Excel per batch - Fix worker.py: add logging.exception, use urlencode for URLs - Fix gui.py: correct slider defaults, rename retry_delay var, consistent formatting - Update README: Python 3.13, document GUI/headless/config.yaml - Split dev deps into requirements-dev.txt - Change output.dir to output/ and create directory - Add tests/__init__.py and new tests for caching + lock behavior All 44 tests pass.
1 parent b548f97 commit 4f70887

17 files changed

Lines changed: 848 additions & 214 deletions

.gitignore

283 Bytes
Binary file not shown.

README.md

Lines changed: 87 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,99 @@
1-
# Web Scrapper de servidorespublicos.gob.mx
1+
# Auto-Servidores
22

3-
Un script de Python que consulta y verifica si los servidores públicos tienen declaración anual actualizada.
3+
Herramienta Python para consultar de forma masiva el API de DeclaraNet y verificar si los servidores públicos tienen declaraciones anuales actualizadas.
44

55
## Requisitos
66

7-
* Python 3.10
8-
* Última versión de Chrome
9-
* Windows (Linux pendiente)
7+
- **Python 3.13**
8+
- Windows, Linux o macOS
109

11-
## Uso del script
10+
## Instalación
1211

13-
1. Instala las librerías:
14-
`
15-
pip install -r requirements.txt
16-
`
12+
1. Clona el repositorio y entra al directorio:
13+
```bash
14+
git clone <url-del-repo>
15+
cd auto-servidores
16+
```
1717

18-
2. Coloca tus archivos Excel de origen dentro de la carpeta /seed, la 1ª columna debe ser "Nombres", la 2ª debe ser "RFC", de lo contrario fallará
18+
2. Crea un entorno virtual (recomendado):
19+
```bash
20+
python -m venv venv
21+
source venv/bin/activate # Linux/macOS
22+
venv\Scripts\activate # Windows
23+
```
1924

20-
3. Ejecuta:
21-
`
22-
python .\main.py
23-
`
25+
3. Instala las dependencias:
26+
```bash
27+
pip install -r requirements.txt
28+
```
2429

25-
## Cómo funciona
26-
El script lee los nombres y RFCs desde seed.xlsx, navega al sitio web de servidorespublicos.gob.mx, e intenta encontrar y descargar los documentos de declaración anual de cada servidor público listado. Utiliza Chrome en modo headless para navegar el sitio, lo que significa que Chrome se ejecuta en segundo plano sin una ventana visible.
30+
Para desarrollo y pruebas, instala también:
31+
```bash
32+
pip install -r requirements-dev.txt
33+
```
34+
35+
## Uso
36+
37+
### Modo GUI (recomendado)
38+
39+
```bash
40+
python gui.py
41+
```
42+
43+
Abre una interfaz gráfica donde puedes:
44+
- Arrastrar o seleccionar archivos Excel de origen
45+
- Ajustar tamaño de lote, trabajadores máximos y parámetros de rate limit
46+
- Ver logs en tiempo real y barra de progreso
47+
48+
### Modo headless (sin GUI)
49+
50+
```bash
51+
python main.py --no-gui
52+
```
53+
54+
## Formato de archivos de origen
55+
56+
Coloca tus archivos Excel (`.xlsx`) dentro de la carpeta `seed/`.
57+
58+
**No deben tener fila de encabezado.** La primera columna debe contener los nombres y la segunda columna los RFCs.
59+
60+
| A | B |
61+
|---|---|
62+
| JUAN PEREZ GARCIA | BEGX123456X01 |
63+
| MARIA LOPEZ HDEZ | BEGX654321X02 |
64+
65+
## Configuración
66+
67+
Todos los parámetros son configurables desde `config.yaml`:
68+
69+
- `api.base_url`: URL base del servicio DeclaraNet
70+
- `api.max_retries` / `api.retry_base_delay`: Reintentos y espera exponencial
71+
- `rate_limit.max_concurrent`: Conexiones simultáneas máximas
72+
- `rate_limit.min_interval`: Intervalo mínimo entre requests
73+
- `rate_limit.cooldown_base` / `cooldown_max`: Backoff exponencial al recibir 429
74+
- `processing.batch_size`: Tamaño de lote para leer del Excel
75+
- `processing.max_workers`: Tareas concurrentes máximas
76+
- `output.dir`: Carpeta de salida (por defecto `output/`)
2777

2878
## Salida
29-
El script creará dos archivos Excel:
3079

31-
ENCONTRADAS.xlsx: Contiene los detalles de los servidores públicos cuyas declaraciones fueron encontradas y descargadas exitosamente.
32-
NO_ENCONTRADAS.xlsx: Contiene los detalles de los servidores públicos cuyas declaraciones no fueron encontradas.
33-
Cada archivo incluirá los nombres, RFCs y otros detalles relevantes extraídos durante el proceso de scraping.
80+
El programa genera dos archivos Excel por cada archivo de origen:
81+
82+
- `{nombre}_ENCONTRADOS.xlsx`: Servidores con declaraciones encontradas
83+
- `{nombre}_NO_ENCONTRADOS.xlsx`: Servidores no encontrados o sin declaración
84+
85+
Los archivos se guardan en la carpeta configurada en `output.dir`.
86+
87+
## Caché
88+
89+
Las respuestas del API se almacenan en SQLite (`.cache/api_cache.db`) con TTL configurable. Esto acelera re-ejecuciones y reduce la carga sobre el servidor.
90+
91+
## Tests
92+
93+
```bash
94+
pytest tests/ -v
95+
```
96+
97+
## Licencia
98+
99+
Uso interno. El proyecto consulta datos públicos de servidores públicos mexicanos a través de la plataforma DeclaraNet.

checkpoint.py

Lines changed: 0 additions & 50 deletions
This file was deleted.

config.yaml

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,19 @@ api:
44
search: /declaranet/consulta-servidores-publicos/buscarsp
55
history: /declaranet/consulta-servidores-publicos/historico
66
default_coll_name: 100
7-
timeout: 30
8-
max_retries: 3
7+
timeout: 60
8+
max_retries: 5
9+
retry_base_delay: 2.0
910
cache:
1011
enabled: true
1112
db_path: .cache/api_cache.db
1213
ttl_seconds: 3600
14+
rate_limit:
15+
max_concurrent: 10
16+
min_interval: 0.15
17+
cooldown_base: 5.0
18+
cooldown_max: 60.0
19+
inter_batch_delay: 1.5
1320
filters:
1421
years_to_check:
1522
- 2025
@@ -18,10 +25,9 @@ filters:
1825
tipoDeclaracion: MODIFICACION
1926
institucionReceptora: INSTITUTO MEXICANO DEL SEGURO SOCIAL
2027
processing:
21-
batch_size: 200
22-
max_workers: 200
23-
checkpoint_interval: 25
28+
batch_size: 25
29+
max_workers: 10
2430
output:
25-
dir: .
31+
dir: output/
2632
found_suffix: _ENCONTRADOS
2733
not_found_suffix: _NO_ENCONTRADOS

0 commit comments

Comments
 (0)