Estoy tratando de completar y enviar un formulario usando Python, pero no puedo recuperar la página resultante. He intentado con los métodos mechanize y urllib/urllib2 para publicar el formulario, pero ambos tienen problemas.Python no puede recuperar formularios con urllib o mecanizar
El formulario que intento recuperar está aquí: http://zrs.leidenuniv.nl/ul/start.php. La página está en holandés, pero esto es irrelevante para mi problema. Cabe destacar que la acción de formulario redirige al http://zrs.leidenuniv.nl/ul/query.php.
En primer lugar, este es el método urllib/urllib2 He intentado:
import urllib, urllib2
import socket, cookielib
url = 'http://zrs.leidenuniv.nl/ul/start.php'
params = {'day': 1, 'month': 5, 'year': 2012, 'quickselect' : "unchecked",
'res_instantie': '_ALL_', 'selgebouw': '_ALL_', 'zrssort': "locatie",
'submit' : "Uitvoeren"}
http_header = { "User-Agent" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.46 Safari/535.11",
"Accept" : "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language" : "nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4" }
timeout = 15
socket.setdefaulttimeout(timeout)
request = urllib2.Request(url, urllib.urlencode(params), http_header)
response = urllib2.urlopen(request)
cookies = cookielib.CookieJar()
cookies.extract_cookies(response, request)
cookie_handler = urllib2.HTTPCookieProcessor(cookies)
redirect_handler = urllib2.HTTPRedirectHandler()
opener = urllib2.build_opener(redirect_handler, cookie_handler)
response = opener.open(request)
html = response.read()
Sin embargo, cuando intento imprimir el código HTML recuperado consigo la página original, no el que la acción forma se refiere a. Entonces, cualquier indicio de por qué esto no envía el formulario sería muy apreciado.
Como lo anterior no funcionó, también traté de usar mecanizar para enviar el formulario. Sin embargo, esto resulta en una ParseError con el siguiente código:
import mechanize
url = 'http://zrs.leidenuniv.nl/ul/start.php'
br = mechanize.Browser()
response = br.open(url)
br.select_form(nr = 0)
donde la última línea sale con lo siguiente: "ParseError: inesperado '-' carbón en la declaración". Ahora me doy cuenta de que este error puede indicar un error en la declaración DOCTYPE, pero como no puedo editar la página del formulario, no puedo probar diferentes declaraciones. Cualquier ayuda sobre este error también es muy apreciada.
Gracias de antemano por su ayuda.
Gracias, esto funcionó! Gracias por su respuesta rápida. – GjjvdBurg
Puedes quitar otras etiquetas también [usando BeautifulSoup] (http://stackoverflow.com/questions/5598524/can-i-remove-script-tags-with-beautifulsoup) – enkash