这个错误是什么意思:ValueError: 未知的 POST 表单编码类型 ' '(如何解决?)

0 投票
1 回答
663 浏览
提问于 2025-04-17 17:11

我正在尝试用 mechanize 来抓取一个网站(http://www.dataescolabrasil.inep.gov.br/dataEscolaBrasil/home.seam),但是遇到了一个我看不懂的错误(所以也没法解决)。这可能是因为我对网页开发的了解不够。

这是我想做的事情:

import mechanize

# this is the website I want to crawl
LINK = "http://www.dataescolabrasil.inep.gov.br/dataEscolaBrasil/home.seam"

br = mechanize.Browser()
br.open(LINK) 
request  = mechanize.Request(LINK)
response = mechanize.urlopen(request)

# there're two forms in the page (output ommited), I want the second one.
forms = mechanize.ParseResponse(response, backwards_compat=False)
for form in br.forms():
    print "Form name:", form.name
    print form

br.select_form(nr=1)
br.form['codEntidadeDecorate:codEntidadeInput'] = '11024968'
response2 = br.submit()

这是我遇到的运行时错误:

Traceback (most recent call last):
  File "C:\test.py", line 19, in <module>
    response2 = br.submit()
  File "build\bdist.win32\egg\mechanize\_mechanize.py", line 541, in submit
  File "build\bdist.win32\egg\mechanize\_mechanize.py", line 530, in click
  File "build\bdist.win32\egg\mechanize\_form.py", line 2999, in click
  File "build\bdist.win32\egg\mechanize\_form.py", line 3201, in _click
  File "build\bdist.win32\egg\mechanize\_form.py", line 2350, in _click
  File "build\bdist.win32\egg\mechanize\_form.py", line 3269, in _switch_click
  File "build\bdist.win32\egg\mechanize\_form.py", line 3257, in _request_data
ValueError: unknown POST form encoding type ''

我尝试了一些方法来调整我传给表单的字符串编码,也试着理解 GET 和 POST 的区别,但都没有成功。

1 个回答

0

我在你的例子中找到了这个表单:

<form id="buscaForm" name="buscaForm" method="post" action="/dataEscolaBrasil/home.seam;jsessionid=EFB3D6270E69EAE71733137219C3026B" enctype="">

我觉得这里有个问题,就是enctype属性是空的。你需要把这个属性的值设置为application/x-www-form-urlencoded,或者直接把它去掉,这样就会使用默认值。

撰写回答