Saltar al contenido

Hoja de referencia de Python Mechanize – PythonForBeginners.com

Mecanizar

Un módulo de Python muy útil para navegar a través de formularios web es Mechanize. En una publicación anterior escribí sobre “Navegar en Python con Mechanize”. Hoy encontré esta excelente hoja de trucos en scraperwiki que me gustaria compartir.

Crea un objeto de navegador

Crea un objeto de navegador y dale algunas configuraciones opcionales.

import mechanize
br = mechanize.Browser()
br.set_all_readonly(False)    # allow everything to be written to
br.set_handle_robots(False)   # ignore robots
br.set_handle_refresh(False)  # can sometimes hang without this
br.addheaders =   	      	# [('User-agent', 'Firefox')]

Abrir una pagina web

Abra una página web e inspeccione su contenido

response = br.open(url)
print response.read()      # the text of the page
response1 = br.response()  # get the response again
print response1.read()     # can apply lxml.html.fromstring()

Usando formularios

Enumere los formularios que están en la página

for form in br.forms():
    print "Form name:", form.name
    print form

Para ir al navegador mecanizar, el objeto debe tener un formulario seleccionado

br.select_form("form1")         # works when form has a name
br.form = list(br.forms())[0]  # use when form is unnamed

Usando controles

Itere a través de los controles en el formulario.

for control in br.form.controls:
    print control
    print "type=%s, name=%s value=%s" % (control.type, control.name, br[control.name])

Los controles se pueden encontrar por nombre

control = br.form.find_control("controlname")

Tener un control de selección le dice qué valores se pueden seleccionar

if control.type == "select":  # means it's class ClientForm.SelectControl
    for item in control.items:
    print " name=%s values=%s" % (item.name, str([label.text  for label in item.get_labels()]))

Debido a que los controles de tipo ‘Seleccionar’ pueden tener múltiples selecciones, deben establecerse con una lista, incluso si es un elemento.

print control.value
print control  # selected value is starred
control.value = ["ItemName"]
print control
br[control.name] = ["ItemName"]  # equivalent and more normal

Los controles de texto se pueden configurar como una cadena

if control.type == "text":  # means it's class ClientForm.TextControl
    control.value = "stuff here"
br["controlname"] = "stuff here"  # equivalent

Los controles se pueden configurar en solo lectura y deshabilitados.

control.readonly = False
control.disabled = True

O deshabilitarlos a todos así

for control in br.form.controls:
   if control.type == "submit":
       control.disabled = True

Envíe el formulario

Cuando su formulario esté completo, puede enviar

 
response = br.submit()
print response.read()
br.back()   # go back

Encontrar enlaces

Seguir enlaces en mecanizar es una molestia porque necesita tener el objeto de enlace. A veces es más fácil obtenerlos todos y encontrar el enlace que desea en el texto.

for link in br.links():
    print link.text, link.url

Seguir el enlace y hacer clic en los enlaces es lo mismo que enviar y hacer clic

Entrenamiento de Python recomendado

Para el entrenamiento de Python, nuestra principal recomendación es DataCamp.

request = br.click_link(link)
response = br.follow_link(link)
print response.geturl()

Espero que comprenda mejor el módulo Mechanize en Python.

Entrenamiento de Python recomendado

Para el entrenamiento de Python, nuestra principal recomendación es DataCamp.