Skip to content

This is a scraping challenge, where the objective is get information from a website and make it available by an API.

Notifications You must be signed in to change notification settings

lilJuan4168/codigo-postal-argentino

 
 

Repository files navigation

Codigo postal argentino

Reto o consigna inicial

Conseguir el nuevo codigo CPA desde la pagina https://codigo-postal.co/ y cargarlos en archivos csv.

Propuesta de solucion

La propuesta es usar scraping para conseguir los codigos que estan alojados en tablas desde diferentes endpoints, despues se procedera a transformarlos y por ultimo a cargarlos en un csv.

Herramientas

  Python

  Scrapy

  Pandas

Se usaran spiders para navegar por todos los links que contienen datos.

Complicaciones

  • Diseño de pagina heterogenio: La pagina no es consistente en sus etiquetas html y css, ya que se encontraron al menos 4 diseños lo que dificulto el armado de los spiders.
  • Nombres de localidades mal escritos: Algunos nombres de localidades estaban mal escritos lo que conllevo mas trabajo en pandas.

Conclusiones y solucion

Se utilizarion 2 spiders para scrapear la informacion, se hizo un trabajo de transformacion en pandas de datatype, orden e eliminacion de datos erroneos, faltantes o mal obtenidos.

El proceso de scraping es lento con una duracion de casi 2 hs, y el archivo es muy grande para subirlo a github, por eso se opto por subirlo comprimido en formato parquet.

total_filas = 1734763
total_columnas = 9
archivos_parquet = 1
tamaño_archivos_parquet = 29.5mb
csv_final_descomprimido = 157.5mb

Conversor parquet a csv

Para convertir los archivos .parquet a .csv ejecutar el script de python situado en la carpeta ETL llamado"ETL_parquet_to_csv_conversor.py".

pip install -r requirements.txt cd ETL python3 ETL_parquet_to_csv_conversor.py

Base de datos

La base de datos usada es mongodb, se diseñaron 3 formas de estructuracion de archivos, directa, embeded y por referencia, siendo por referencia la arquitectura pedida.
Para cargar los archivos en mongodb se tiene que llenar la variable -uri- en credentials.json y despues seguir los siguientes pasos.
Para mas detalles de la estructura de la base de datos README-api-database

#1 Asegurarse de tener el archivo CPA_data_converted.csv en la carpeta data/
#2 Correr el siguiente script
cd database_loaders
python3 csv_mongo_loader_reference.py

API

La api fue hecha con fast api y se encuentra en API/cpa_api_reference.py, puede ser ejecutada de dos maneras.

#1
cd API
python3 cpa_api_reference.py
#2 (linux)
bash_scripts/api_activate.sh

About

This is a scraping challenge, where the objective is get information from a website and make it available by an API.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 99.7%
  • Shell 0.3%