Completar formularios con mechanize y BeautifulSoup
Python, mechanize y BeautifulSoup |
Hace unos días que estoy jugando con las librerías mechanize y BeautifulSoup, y la verdad que me han dejado con muchas ganas de seguir aprendiendo. En la entrada anterior les mostré un ejemplo sencillo de como acceder a los datos de una pagina web con Python y BeautifulSoup, hoy veremos como llenar un sencillo formulario con la librería mechanize, capturar la respuesta con BeautifulSoup y extraer los datos de interés de dicha respuesta.
Les dejo la entrada anterior: Web Scraping con Python y BeautifulSoup
Les dejo el código en GitHub: https://github.com/DiegoCaraballo/SignificadoDeNombres.git
Mechanize
La librería mechanize se utiliza para navegar a travez de formularios web. Sin rodeos y para que nos entendamos, automatiza la tarea de entrar en un sitio web, llenar un formulario (de Contacto por ejemplo) y enviarlo (Ejemplo: presionar el botón "Guardar", "Enviar", "Buscar", etc)
Si quieren saber un poco más, les dejo el enlace: https://pypi.python.org/pypi/mechanize/
Su instalación: pip install mechanize
Luego de estar haciendo algunas pruebas, se me vino una imagen a la cabeza
¿Y si no es un humano? |
Script SignificadosDeNombres.py
Luego de ver que podía compartirles, tratando de que el código no fuera muy invasivo, se me ocurrió hacer un script que entre en un sitio que contiene el significado de muchos nombres (hay nombres que no aparecen :(), pida por un nombre y luego nos retorne su significado. El script es muy básico, pero pretende ser de ayuda para futuros códigos.
Buscar Nombre |
El formulario a llenar con mechanize |
Las pruebas las hice en un sistema linux (Ubuntu) y probé nombres como (Diego, Roberto, Mariela, Mirta, etc).
En los comentarios del código explico sus lineas
Código:
#!/usr/bin/env python # -*- coding: utf-8 -*- # Diego Caraballo # www.pythondiario.com # Importamos librerias necesarias from bs4 import BeautifulSoup import mechanize import os # Instanciamos el objeto br br = mechanize.Browser() # Opciones para el navegador # Ingnora robots.txt br.set_handle_robots(False) br.set_handle_equiv(False) # Simula ser una persona br.addheaders = [('User-agent', 'Mozilla/5.0')] # Opcion para terminar el bucle opcion = "N" # Bucle para seguir mostrando nombres while (opcion != "S"): nombre = raw_input("Ingrese un nombre: ") # Pagina web url = 'http://www.misabueso.com/nombres/nombre.php' br.open(url) br.select_form(nr= 0) br.form[ 'nombre' ] = nombre print "" # Guardo el contenido del resultado de apretar el boton buscar en formato (html) data = br.submit() # Instancio el objeto soup soup = BeautifulSoup(data, "html.parser") # Busco dentro del div, donde tengo el texto del nombre div = soup.find_all("div", {"class" : "in_a_box"}) # Cantidad de lineas cant = len(div) # Recorro hasta la penultima linea del div y luego muestro for i in div[:(cant-1)]: print i.text + "n" print "" opcion = raw_input("Presiones 'S' para Salir...") # Convierto la letra a Mayusculas opcion = opcion.upper() # Limpia pantalla, usar 'cls' para Windows os.system("clear")
Cualquier duda, comentario o sugerencia, siempre es bienvenida. Seguiré aprendiendo sobre el tema de la automatización y extracción de datos con Python y por lo tanto iré compartiendo lo aprendido. Saludos
-
-
Hola Ander, no entiendo que te refieres a una web externa? Si puedes plantearme mejor el caso.
Saludos, Diego.
-
-
Hola Diego Caraballo, una pregunta, he intentado hacer lo mismo para una pagina en especial, pero esta pagina la modifican muy seguido, habra alguna forma de abrir esta pagina en python, poder acceder llenando a mano el formulario y despues capturar el link resultante y poder obtener los documentos de este link?
-
Hola Maricelam, lo que cambia es el login?
Saludos y gracias por visitar el blog!!!
-
-
Una pregunta es que en mi codigo bota un error al hacer el submit()
muestra un error 405 method not allowed Sabes la solucion ? -
Estimado Diego muy buen tutorial con BeautifulSoup, una pregunta cuando el campo a llenar es un campo selec o de vaias opcciones. Capo favor responderme con una lijera respuesta....Gracias
-
Hola diego yo quiero rellenar un formulario pero me da error en la pagina para entrar es como si la tuvieran tufada como puedo romper el tufe
-
Hola Dario, tengo un problema al usar esta pagina https://reactivoenlinea.invima.gov.co/TransparenciaWeb/ y es que me deja introducir los valores del grupo y la fecha, y presionar el submit de consultar, pero cuando hago esto debería aparecer el boton de exportar, lo cual no me aparece. Sabes por qué pasa esto?
Gracias.-
Hola Juan ¿Cómo estás?
Luego que presionas en consultar ¿El script espera algunos segundos? porque el botón veo que se carga después de load de carga (unos 2 segundos en mi caso). Quizá no está apareciendo porque no esperas que aparezca. Saludos -
Dario podrías enviarme el código que has usado por favor? No entiendo por qué a mi no me aparece ese botón si le estoy dando una espera luego de hacer la consulta.
-
Deja una respuesta
Saludos Diego. Para completar formulario de una web externa, el script de python debe estar en un servidor?