gam / curp-scrapper
CURP Scrapper
Requires
- php: ^8.2
- dbrekelmans/bdi: ^1.3
- symfony/panther: ^2.1
Requires (Dev)
- ramsey/devtools: ^2.0
This package is auto-updated.
Last update: 2024-05-01 12:05:15 UTC
README
CURP Scrapper
About
Consulta la CURP 🇲🇽 (Clave Única de Registro de Población) mediante web scrapping
al portal oficial. Puedes obtener todos los datos que
ofrece el portal oficial asi como la descarga del PDF
.
How it is work?
La consulta de datos funciona mediante web scrapping al
portal oficial utilizando un webdriver para
la automatización de un navegador basado en Chromium. Se levanta una
instancia headless
del navegador cambiando algunos parámetros para
que sea indetectable a la tecnología anti-bot de
Akamai.
Personalmente, no soy fan de utilizar webdrivers/selenium o cualquier otro software de automatización de pruebas en navegadores para hacer tareas de scrapping, pero para este caso facilita en gran medida la no detección de bots de Akamai.
Installation
Instala este paquete mediante Composer.
composer require gam/curp-scrapper
Browser & Webdriver Installation
Antes de usar el paquete es necesario instalar un navegador basado en chromium y su
respectivo webdriver
:
- Instalar Chrome o Chromium
- Instalar el correspondiente webdriver o simplemente puedes ejecutar:
# Instala el driver correspondiente a la version de Chrome/Chromium instalada php vendor/bin/driver
Usage
Usar la biblioteca es sencillo. Puedes obtener los datos de una CURP
o descargar el PDF
.
Obtener Datos De CURP
<?php declare(strict_types=1); /* * Si no se especifica la ruta del driver, * el paquete utilizara el ubicado en la ruta build/ * el cual se instala utilizando composer scrapper:driver */ $scrapper = new \Gam\CurpScrapper\Renapo\Scrapper(); $data = $scrapper->getCurpData(new \Gam\CurpScrapper\Model\Curp('UZLK580803MVZGIB96')); /** * @var \Gam\CurpScrapper\Model\Ciudadano $ciudadano * Obtener datos del ciudadano */ $ciudadano = $data->getCiudadano(); /** * @var \Gam\CurpScrapper\Model\DocumentoProbatorio $documentoProbatorio * Obtener datos del documento como Tomo, Año de registro, Foja, Acta, Libro */ $documentoProbatorio = $data->getDocumentoProbatorio(); /** * @var \Gam\CurpScrapper\Model\CurpEstatus $status * Consulte los posibles estatus de una CURP */ $status = $data->getEstatusCurp();
Obtener PDF De CURP
Existen 2 formas de obtener el PDF de una CURP
-
Mediante el resultado de una búsqueda: Se da como parámetro un objeto de tipo
CurpResult
el cual es resultado de una búsqueda mediante el métodogetCurpData
. -
Directamente desde una CURP: Se da como parámetro un objeto de tipo
Curp
.
<?php declare(strict_types=1); $scrapper = new \Gam\CurpScrapper\Renapo\Scrapper(); /* * Obtener PDF desde el resultado de una busqueda */ $data = $scrapper->getCurpData(new \Gam\CurpScrapper\Model\Curp('UZLK580803MVZGIB96')); $pdf = $scrapper->getPdf($data); /* * Obtener PDF desde una CURP */ $pdf = $scrapper->getPdfFromCurp(new \Gam\CurpScrapper\Model\Curp('UZLK580803MVZGIB96'));
NOTA: En ambos escenarios se hace el mismo número de solicitudes HTTP al portal web
Estatus De CURP
AN
: Alta NormalAH
: Alta con HomonimiaRCN
: Registro de Cambio No afectando a CURPRCC
: Registro de Cambio Afectando a CURPBD
: Baja por DefunciónBSU
: Baja Sin UsoBAP
: Baja por Documento ApócrifoBDM
: Baja AdministrativaBDP
: Baja por AdopciónBJD
: Baja Judicial
Proxy
Si bien puedes obtener los datos de una CURP sin ninguna accion adicional,
cuando realizas más de 15 solicitudes en menos de 1 minuto*, la tecnología
de Akamai bloquera tus posteriores peticiones y obtendras el siguiente
mensaje de error: El servicio no está disponible
Esto se debe a que, la tecnología de Akamai, basa parte de su detección de bots en un rate-limit y tambien determina si la solicitud proviene de un pool de direcciones IP que pertenezcan a proxies publicos, cloud providers o en general, IP con mala reputación.
Por lo anterior, es recomendable establecer un Proxy Residencial:
// sin autenticacion $scrapper = new \Gam\CurpScrapper\Renapo\Scrapper( proxy: new \Gam\CurpScrapper\Model\Proxy('127.0.0.1', 8383) ); // con autenticacion $scrapper = new \Gam\CurpScrapper\Renapo\Scrapper( proxy: new \Gam\CurpScrapper\Model\Proxy('127.0.0.1', 8383, 'foo', 'bar') );
Configuraciones
En ciertos es escenarios puede ser requerido cambiar algunos parametros del scrapper.
- Path del binario de chrome: Si no es posible ubicarlo en las rutas por defecto, puede
especificar la ruta absoluta del binario de chrome con la variable de entorno
SCRAPPER_CHROME_BINARY
putenv('SCRAPPER_CHROME_BINARY=/path/to/binary.exe');
- Path del webdriver: Si deseas especificar otra ruta para el webdriver (chromedriver.exe):
$scrapper = new \Gam\CurpScrapper\Renapo\Scrapper(driverPath: '/path/to/driver.exe')
- Directorio temporal de chrome: Si no es posible crear el directorio temporal por defecto,
puede especificar una ruta alterna:
$scrapper = new \Gam\CurpScrapper\Renapo\Scrapper(dataDir: '/path/to/temp-dir');
Contributing
Contributions are welcome! To contribute, please familiarize yourself with CONTRIBUTING.md.
Coordinated Disclosure
Keeping user information safe and secure is a top priority, and we welcome the contribution of external security researchers. If you believe you've found a security issue in software that is maintained in this repository, please read SECURITY.md for instructions on submitting a vulnerability report.
Copyright and License
gam/curp-scrapper is copyright © Antonio Gamboa. All rights reserved.
TODO
- Code Coverage