Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Consulta de base de datos con Panda y Selenium
#1
Buenas noches a todos, tengo un problema con una extracción de datos web de tablas. Aclaro que tengo conocimientos básicos y necesito ayuda para buscar una solución.

La tabla que extraido a veces tiene campos en blanco y al crear las listas para exportarlo a csv, luego no me calzan las columnas en Excel. paso a explicarlo con un ejemplo:

Registro #1 (María, González, 18 años, España, Barcelona)
Registro #2 (José, Pérez, España, Barcelona) #Acá falta la edad por ejemplo


Así capturo cada registro y creo el data frame en Panda:

Código:
Lineas=driver.find_elements_by_tag_name('//*[@id="datos"]/td')
driver.quit()
   
    datos=[]
    for linea in Lineas:
        datos.append(linea)
   
    df = pd.DataFrame(datos)
    my_path='C:/Users/Jaime/Desktop/python-course/Archivo.csv'
    df.to_csv(my_path , index=false)
Responder
#2
Hola, bienvenido.

¿Cuál es la web de la cual estás extrayendo los datos? Sin esa información es muy dificil ver cómo se podría solucionar.

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#3
(19-03-2022, 10:10 PM)Francisco escribió: Hola, bienvenido.

¿Cuál es la web de la cual estás extrayendo los datos? Sin esa información es muy dificil ver cómo se podría solucionar.

Saludos

Hola, muchas gracias por tu respuesta.

Como es un proceso automatizado, te paso dos link para analizar el problema:
https://www.panamacompra.gob.pa/Inicio/#...nnc=0&it=1
https://www.panamacompra.gob.pa/Inicio/#...nnc=0&it=1

Si ves la sección "Contacto de la unidad de compra", de estos dos casos, uno contiene Cargo y el otro no, es decir, el td está vacío.

Como mencioné, cuando creo la lista, en un caso puedo tener 4 elementos y en otro 3 elementos por que falta el cargo
El asunto, es cómo lleno el campo cuando hago la captura del registro o sino, como rellenarlo una vez capturado.

Saludos
Jimmy
Responder
#4
Hola.

Si el campo "Cargo" es el único que puede faltar, entonces podés rellenarlo manualmente luego de haber capturado los datos:

Código:
datos=[]
for linea in Lineas:
    fila = list(linea)
    if len(fila) == 3:
        fila.insert(1, "")  # Rellenar el segundo campo.
    datos.append(fila)

Te dejo un artículo sobre las listas: https://recursospython.com/guias-y-manua...-y-tuplas/.

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#5
(21-03-2022, 09:43 AM)Francisco escribió: Hola.

Si el campo "Cargo" es el único que puede faltar, entonces podés rellenarlo manualmente luego de haber capturado los datos:

Código:
datos=[]
for linea in Lineas:
    fila = list(linea)
    if len(fila) == 3:
        fila.insert(1, "")  # Rellenar el segundo campo.
    datos.append(fila)

Te dejo un artículo sobre las listas: https://recursospython.com/guias-y-manua...-y-tuplas/.

Saludos

Muchas gracias la respuesta y el artículo. Son poco más de 1000 registros y varían los campos faltantes, siempre podría capturar el nombre del campo, por ejemplo: "Cargo" para evaluar si está vacío o no. Tengo una pregunta en dos partes: 

1) Hay alguna forma de rellenar automáticamente desde la captura por ejemplo si cargo = " " le pongo un valor "N/D".  
2) Para confirmar, sólo lo puedo hacer con en el CSV una vez creado?.
Responder
#6
No creo que (1) sea posible, pero es algo trivial de hacer con un bucle luego de haber capturado los datos y antes de enviarlos al CSV (en respuesta a lo segundo). De hecho eso te proponía en el mensaje anterior. Por cierto, ¿cuál es exactamente el filtro que estás usando al llamar a find_elements_by_tag_name()?
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#7
(21-03-2022, 10:29 PM)Francisco escribió: No creo que (1) sea posible, pero es algo trivial de hacer con un bucle luego de haber capturado los datos y antes de enviarlos al CSV (en respuesta a lo segundo). De hecho eso te proponía en el mensaje anterior. Por cierto, ¿cuál es exactamente el filtro que estás usando al llamar a find_elements_by_tag_name()?

Perfecto, mil gracias!
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)