2012-09-10 9 views
5

Sto tentando di compilare e inviare un modulo utilizzando Python, ma non sono in grado di recuperare la pagina risultante. Ho provato entrambi i metodi mechanize e urllib/urllib2 per pubblicare il modulo, ma entrambi hanno problemi.Python non è in grado di recuperare il modulo con urllib o mechanize

Il modulo che sto cercando di recuperare è qui: http://zrs.leidenuniv.nl/ul/start.php. La pagina è in olandese, ma questo è irrilevante per il mio problema. Può essere interessante notare che l'azione modulo reindirizza a http://zrs.leidenuniv.nl/ul/query.php.

Prima di tutto, questo è il metodo urllib/urllib2 Ho provato:

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() 

Tuttavia, quando provo a stampare il codice HTML recuperata ho la pagina originale, non quello l'azione modulo si riferisce a. Quindi qualsiasi suggerimento sul motivo per cui questo non presenta il modulo sarebbe molto apprezzato.

Poiché quanto sopra non ha funzionato, ho anche provato a utilizzare mechanize per inviare il modulo. Tuttavia, questo si traduce in un parseError con il seguente codice:

import mechanize 

url = 'http://zrs.leidenuniv.nl/ul/start.php' 
br = mechanize.Browser() 
response = br.open(url) 
br.select_form(nr = 0) 

dove l'ultima linea esce con il seguente: "parseError: inaspettato '-' char nella Dichiarazione". Ora mi rendo conto che questo errore potrebbe indicare un errore nella dichiarazione DOCTYPE, ma poiché non posso modificare la pagina del modulo non sono in grado di provare dichiarazioni diverse. Qualsiasi aiuto su questo errore è anche molto apprezzato.

Grazie in anticipo per il vostro aiuto.

risposta

1

È perché la parte DOCTYPE non è corretta.

Inoltre contiene alcuni strani tag come:

<!Co Dreef/Eelco de Graaff Faculteit der Rechtsgeleerdheid Universiteit Leiden><!e-mail [email protected] > 

Prova validating pagina da soli ...


Tuttavia, si può solo togliere la spazzatura per rendere meccanizza html parser felice:

import mechanize 

url = 'http://zrs.leidenuniv.nl/ul/start.php' 

br = mechanize.Browser() 
response = br.open(url) 
response.set_data(response.get_data()[177:]) 
br.set_response(response) 

br.select_form(nr = 0) 
+0

Grazie, ha funzionato! Grazie per la tua risposta veloce. – GjjvdBurg

+0

Puoi rimuovere anche altri tag [utilizzando BeautifulSoup] (http://stackoverflow.com/questions/5598524/can-i-remove-script-tags-with-beautifulsoup) – enkash

Problemi correlati