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.
Dzięki, to zadziałało! Dziękuję za szybką odpowiedź. – GjjvdBurg
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