2012-09-10 11 views
5

Próbuję wypełnić i przesłać formularz za pomocą Pythona, ale nie mogę odzyskać wynikowej strony. Próbowałem dwóch metod mechanize i urllib/urllib2, aby opublikować formularz, ale oba mają problemy.Python nie może odzyskać formularza za pomocą urllib lub zmechanizować

Formularz, który próbuję pobrać, znajduje się tutaj: http://zrs.leidenuniv.nl/ul/start.php. Strona jest w języku niderlandzkim, ale nie ma to znaczenia dla mojego problemu. Warto zauważyć, że działanie formularza przekierowuje do http://zrs.leidenuniv.nl/ul/query.php.

Przede wszystkim, jest to metoda urllib/urllib2 Próbowałem:

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

Jednak gdy próbuję wydrukować pobrane html dostaję oryginalną stronę, a nie jeden odnosi się akcja forma do. Tak więc wszelkie sugestie, dlaczego tak się nie stanie, byłyby bardzo mile widziane.

Ponieważ powyższe nie działało, starałem się również użyć mechanizmu do przesłania formularza. Powoduje to jednak w ParseError z następującego kodu:

import mechanize 

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

gdzie ostatnia linia wychodzi z poniższym: „ParseError: nieoczekiwany«-»char w deklaracji”. Teraz zdaję sobie sprawę, że ten błąd może wskazywać na błąd w deklaracji DOCTYPE, ale ponieważ nie mogę edytować strony formularza, nie mogę wypróbować różnych deklaracji. Pomocna w tym błędzie jest również bardzo doceniana.

Z góry dziękuję za pomoc.

Odpowiedz

1

To dlatego, że część DOCTYPE jest zniekształcona.

Ponadto zawiera on jakieś dziwne tagów jak:

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

Spróbuj validating strona samemu ...


Niemniej jednak, można po prostu rozebrać śmieci aby mechanizes html parser zadowolony:

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

Dzięki, to zadziałało! Dziękuję za szybką odpowiedź. – GjjvdBurg

+0

Można również pozbyć się innych znaczników [używając BeautifulSoup] (http://stackoverflow.com/questions/5598524/can-i-remove-script-tags-with-beautifulsoup) – enkash

Powiązane problemy