我正在尝试使用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时,我得到的是原始页面,而不是form动作所引用的页面。因此,任何关于为什么不提交表格的提示将不胜感激。
由于上述方法无效,因此我也尝试使用机械化方式提交表单。但是,这将导致ParseError包含以下代码:
import mechanize url = 'http://zrs.leidenuniv.nl/ul/start.php' br = mechanize.Browser() response = br.open(url) br.select_form(nr = 0)
最后一行以以下内容退出:“ ParseError:声明中出现意外的’-‘char”。现在,我意识到此错误可能表明DOCTYPE声明中存在错误,但是由于无法编辑表单页面,因此无法尝试其他声明。对此错误的任何帮助也将不胜感激。
在此先感谢您的帮助。
这是因为DOCTYPE零件格式不正确。
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)