2011-04-14 15 views
9

Estoy buscando poder consultar un sitio para obtener información de garantía en una máquina en la que se ejecutaría este script. Debería poder completar un formulario si es necesario (como en el caso del sitio de servicio de HP, por ejemplo) y luego podría recuperar la página web resultante.Python urllib2 llenado y recuperación de formularios automáticos

Ya tengo los bits en su lugar para analizar el html resultante que se informa. Solo estoy teniendo problemas con lo que se necesita hacer para hacer una POST de datos que deben colocarse en los campos y luego ser capaz de recuperar la página resultante.

Respuesta

0

Sólo he hecho un poco de esto, pero:

  1. que tenga el HTML de la página de formulario. Extraiga el atributo name para cada campo de formulario que necesite completar.
  2. Cree un diccionario mapeando los nombres de cada campo de formulario con los valores que desea enviar.
  3. Utilice urllib.urlencode para convertir el diccionario en el cuerpo de su solicitud de publicación.
  4. Incluya esta información codificada como el segundo argumento en urllib2.Request(), después de la URL a la que se debe enviar el formulario.

El servidor devolverá una página web resultante o devolverá una redirección a la página web resultante. Si hace esto último, deberá emitir una solicitud GET a la URL especificada en la respuesta de redirección.

Espero que tenga algún sentido?

1

Usando urllib y urllib2 juntos,

data = urllib.urlencode([('field1',val1), ('field2',val2)]) # list of two-element tuples 
content = urllib2.urlopen('post-url', data) 

contenido le dará la fuente de la página.

16

Si es absolutamente necesidad utilizar urllib2, la esencia básica es la siguiente:

import urllib 
import urllib2 
url = 'http://whatever.foo/form.html' 
form_data = {'field1': 'value1', 'field2': 'value2'} 
params = urllib.urlencode(form_data) 
response = urllib2.urlopen(url, params) 
data = response.read() 

Si envía a lo largo de datos POST (el segundo argumento para urlopen()), el método de la petición se ajusta automáticamente a la POST.

Te sugiero que hágase un favor y utilizar mechanize, un reemplazo en toda regla urllib2 que actúa exactamente igual que un navegador real. Muchos sitios usan campos ocultos, cookies y redirecciones, ninguno de los cuales urllib2 maneja por usted de manera predeterminada, donde mechanize sí lo hace.

Consulte Emulating a browser in Python with mechanize para obtener un buen ejemplo.

+2

También votaré por mechanize. Lo he usado varias veces. Realmente útil y mucho más fácil que urllib y urllib2 para hacer cosas complejas. –

+0

Estoy de acuerdo. Mecanizar es la herramienta estándar para hacer esto. No use urllib2 a menos que sea absolutamente necesario. –

Cuestiones relacionadas