蟒蛇无法检索形式的urllib或机械化(Python unable to retrieve form

2019-06-28 02:46发布

我想填写并提交使用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声明错误,但因为我不能编辑表单页面,我不能够尝试不同的声明。 这个错误的任何帮助也极大的赞赏。

在此先感谢您的帮助。

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


文章来源: Python unable to retrieve form with urllib or mechanize