【问题标题】:Python unable to retrieve form with urllib or mechanizePython 无法使用 urllib 或 mechanize 检索表单
【发布时间】:2012-09-03 09:04:05
【问题描述】:

我正在尝试使用 Python 填写并提交表单,但我无法检索结果页面。我已经尝试过 mechanize 和 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 时,我得到的是原始页面,而不是表单操作所指的页面。因此,任何关于为什么不提交表单的提示将不胜感激。

因为上面的不行,我也试过用mechanize提交表单。但是,这会导致带有以下代码的 ParseError:

import mechanize

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

最后一行以以下内容退出:“ParseError: unexpected '-' char in declaration”。现在我意识到这个错误可能表明 DOCTYPE 声明中存在错误,但由于我无法编辑表单页面,我无法尝试不同的声明。对此错误的任何帮助也非常感谢。

提前感谢您的帮助。

【问题讨论】:

    标签: python forms urllib2 mechanize urllib


    【解决方案1】:

    这是因为DOCTYPE 部分格式错误。

    它还包含一些奇怪的标签,例如:

    <!Co Dreef / Eelco de Graaff Faculteit der Rechtsgeleerdheid Universiteit Leiden><!e-mail j.dreef@law.leidenuniv.nl >
    

    亲自尝试validating该页面...


    尽管如此,你可以去掉垃圾来让机械化的 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)
    

    【讨论】:

    猜你喜欢
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    相关资源
    最近更新 更多