Python не может получить форму с помощью urllib или механизировать
Я пытаюсь заполнить и отправить форму, используя Python, но я не могу получить полученную страницу. Я пробовал и механизировать, и методы urllib/urllib2, чтобы опубликовать форму, но оба столкнулись с проблемами.
Форма, которую я пытаюсь получить, находится здесь: http://zrs.leidenuniv.nl/ul/start.php. Страница на голландском, но это не имеет отношения к моей проблеме. Следует отметить, что действие формы перенаправляется на http://zrs.leidenuniv.nl/ul/query.php.
Прежде всего, это метод urllib/urllib2, который я пробовал:
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()
Однако, когда я пытаюсь напечатать полученный html, я получаю исходную страницу, а не ту, к которой относится действие формы. Так что любые советы о том, почему это не отправляет форму будет принята с благодарностью.
Поскольку вышеупомянутое не сработало, я также попытался использовать механизировать для отправки формы. Однако это приводит к ParseError со следующим кодом:
import mechanize
url = 'http://zrs.leidenuniv.nl/ul/start.php'
br = mechanize.Browser()
response = br.open(url)
br.select_form(nr = 0)
где выходит последняя строка со следующим: "ParseError: непредвиденный" - "символ в объявлении". Теперь я понимаю, что эта ошибка может указывать на ошибку в объявлении DOCTYPE, но, поскольку я не могу редактировать страницу формы, я не могу попробовать другие объявления. Любая помощь по этой ошибке также с благодарностью.
Заранее спасибо за помощь.
1 ответ
Это потому что DOCTYPE
часть повреждена
Также он содержит несколько странных тегов, таких как:
<!Co Dreef / Eelco de Graaff Faculteit der Rechtsgeleerdheid Universiteit Leiden><!e-mail j.dreef@law.leidenuniv.nl >
Попробуйте проверить страницу самостоятельно...
Тем не менее, вы можете просто убрать мусор, чтобы сделать механизированный анализатор HTML счастливым:
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)