Google+ Seguidores

sábado, 20 de agosto de 2016

Completar formularios con mechanize y BeautifulSoup

    2

Python, 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?
¿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
Buscar Nombre
El formulario a llenar con mechanize
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

2 comentarios:
Write comentarios
  1. Saludos Diego. Para completar formulario de una web externa, el script de python debe estar en un servidor?

    ResponderEliminar
    Respuestas
    1. Hola Ander, no entiendo que te refieres a una web externa? Si puedes plantearme mejor el caso.
      Saludos, Diego.

      Eliminar

Tu comentario es importante y nos motiva a seguir escribiendo...

Entradas más recientes

© 2014 Mi diario Python. Designed by Bloggertheme9 | Distributed By Gooyaabi Templates
Powered by Blogger.