parseando base de datos servel y cargarlo en MYSQL[PARTE_1]

Tema en 'Manuales y Tutoriales' iniciado por Curso_C, 20 Ago 2012.

  1. Curso_C

    Curso_C Usuario Nuevo nvl. 1
    1/41

    Registrado:
    26 Ago 2010
    Mensajes:
    330
    Me Gusta recibidos:
    2
    Como todos se habran dado cuenta, la base de datos del servel( padron del registro electoral ), se ha hecho publica, al igual que todoos los años, pero este año lo han dejado un poco mas dificil(antes te daban los registros en texto plano, con los formatos de las tablas, ademas daban mucha mas informacion), entonces nos toca realizar la pega a nosotros, la de pasar a texto plano y luego a un formato mas comodo para exportarla a un DBMS, que en este caso será MYSQL.

    antes de comenzar dejaré en claro una cosa, yo se que este procedimiento se puede realizar con tan solo
    un par de CLICK!! , en cualquier sistema operativo, mi intención de este tutorial es que la gente aprenda
    y nose acostumbre a ser un usuario de BOTON GORDO como se les llama, y mas aun si se encuentran estudiando
    alguna carrera del area de la informatica.

    para comenzar esta primera parte del tutorial necesitamos lo siguiente:
    - una distribucion de linux(en mi caso utilizo backtrack5 r2)
    - pdftotext => programa para pasar de pdf a texto plano.
    - python => interprete de python.
    - comandos basicos que bienen en la mayoria de las distribucion ( wget ,cat ,egrep .... )
    - conocimientos basicos de bash
    - ganas de aprender y si no se entiende preguntar .

    el tutorial lo he dividido en dos partes, la primera parte donde nos descargaremos la base de datos,
    y la dejaremos en texto plano, para luego en la segunda parte, escribir un script en python y dejarla
    en formato CSV y posteriormente cargarla en MYSQL.


    1) vamos a descargar los PDF, automatizando la tarea, en la consola de comandos procedemos a ejecutar
    el siguiente comando.

    esto nos va a descargar el archivo con nombre "neochn2.aspx?appinstanceid=320&pubid=980" y ahora procedemos
    a parsear los archivo y sacar solamente las URLS que apuntan a los archivos PDF, para esto vamo a hacer uso
    de expresiones regulares y obtener las URLS.

    ejecutamos :

    muchas cosas que explicar aca, lo primero es que con el comando cat leemos el archivo descargado y utilizando las famosas 'pipes |' pasamos el flujo de datos al comando egrep, este haciendo uso de expresiones regulares, notar el -io , donde 'i'
    hace referencia a no hacer distincion entre mayusculas y minusculas y 'o' fuerza a que solamente nos muestre
    por pantalla las url's que nos interesan (hagan la prueba sin el 'o' y entenderan), luego la salida(flujo de datos) del comando egrep es redireccionada al archivo link.txt, donde contendra las URLS que nos interesan.

    ahora utilizando el comando wget procedemos a descargar la lista de URLS(archivos PDF's).

    ejecutamos:

    y ahora a esperar y esperar, hasta que termine de descargar los PDF's, una vez terminada la descarga, procedemos
    a pasar todos los pdf a txt, automatizando la tarea y optimizando, trataremos de que sea lo mas rapido posible.

    ejecutamos:

    con esto obtenemos todos los nombres de los pdf y almacenamos el nombre en la variable 'arch' , luego ejecutando pdftotext , realizamos la conversion de pdf a texto.

    ahora a esperar y esperar, Oh !!! wait !!
    si necesitamos pasar los datos de una manera mas rapida, no seria bueno aumentar la prioridad del proceso
    para que tenga mas tiempo de ejecucion ??, que pasa si realizo un renice(comando para cambiar la prioridad)
    pdftotext ?? , aumento la prioridad del proceso "actual" que esta conviertiendo, y para ello se necesita el PID
    del proceso, pero nos servira muy poco realizar un renice al proceso pdftotext si el proceso termina y luego
    lo ejecuta denuevo, el pid del proceso cambia, por ende el proximo proceso se ejecuta con la prioridad
    que se les da normalmente(0), para solucionar este problema vamos a realizar un pequeño script el cual se encargara de aumentar la prioridad de este proceso cada x segundos.

    a tener en cuenta, la prioridad de los procesos va de 19 a -20 , donde lo normal es la prioridad 0 que se les da a los
    procesos, y la prioridad mas alta es -20(leyeron bn es -20 ).

    entonces mientras estan en proceso de conversion de archivos PDF a TXT , nos conviene ejecutar esta otra linea
    en otra consola.

    ejecutamos:

    pueden cambiar el sleep para que lo haga al gusto de ustedes ;) .

    es solo una linea :p , con esto ya deberiamos tener los archivos PDF en TEXTO, para realizar el parseo a CSV, y
    posteriormente a cargarlo en MYSQL, y eso lo dejaremos para el proximo POST, ya que ni siquiera yo he terminado
    de convertir los PDF a TEXTO } .

    hasta aqui lo dejo por ahora y prometo que antes que termine la semana les tendre la segunda parte
    de este tutorial, acepto cualquier tipo de critica :p .






    :portalnet:
     
    #1 Curso_C, 20 Ago 2012
    Última edición: 20 Ago 2012
  2. Snake575

    Snake575 Usuario Nuevo nvl. 1
    1/41

    Registrado:
    25 Ago 2012
    Mensajes:
    1
    Me Gusta recibidos:
    0
    Excelente tutorial, esperando la segunda parte ya que no me manejo tanto jajja
     
  3. mi.vallejos

    mi.vallejos Usuario Nuevo nvl. 1
    1/41

    Registrado:
    29 Ago 2012
    Mensajes:
    2
    Me Gusta recibidos:
    0
    Oye Gracias por ver mi pregunta. Yo soy encargado de una fundacion y queremos mandarle correspondencia a algunas personas y nos interesa tener la base de datos en Sql para poder hacerlo pero lo que muestras está lejos de lo que yo puedo hacer con mis voluntarios. La opción que tenemos es transformar con un programa los archivos a Excel y de ahí armar una base pero el programa que transforma a excel solo me deja hacerlo por cada 10 hojas, asi que imaginate, vamos a terminar el 2025 con esta base. Yo no se si tienes alma para ayudar, si es así, contáctame a [email protected] Gracias por tu tiempo.
     
  4. mi.vallejos

    mi.vallejos Usuario Nuevo nvl. 1
    1/41

    Registrado:
    29 Ago 2012
    Mensajes:
    2
    Me Gusta recibidos:
    0
    Hola:

    Me escribiste a mi correo y te respondí pero aun no tengo respuesta.
     
  5. fruko33

    fruko33 Usuario Nuevo nvl. 1
    1/41

    Registrado:
    6 Ene 2013
    Mensajes:
    2
    Me Gusta recibidos:
    0
    necesito comprar base de datos.IV region .