1

我正在使用 mechanize 库来模拟浏览器以获取 html,如下所示,但时不时地我不断收到错误...

代码出错:

post_url = "http://www.stackoverflow.com/"
browser = mechanize.Browser()
browser.set_handle_robots(False)
browser.addheaders = [('User-agent', 'Firefox')]

html = browser.open(post_url).read().decode('UTF-8')

错误:

Traceback (most recent call last):
  File "C:\test.py", line 1538, in <module>
    periodically(180, -60, +60, getData)
  File "C:\test.py", line 262, in periodically
    s.run()
  File "C:\Python27\lib\sched.py", line 117, in run
    action(*argument)
  File "C:\test.py", line 1241, in getData
    html = browser.open(post_url).read().decode('UTF-8')
  File "build\bdist.win32\egg\mechanize\_mechanize.py", line 203, in open
    return self._mech_open(url, data, timeout=timeout)
  File "build\bdist.win32\egg\mechanize\_mechanize.py", line 255, in _mech_open
    raise response
httperror_seek_wrapper: HTTP Error 500: Internal Server Error
>>> 

任何人都知道如何修复它/解决这个错误?

4

2 回答 2

2

HTTP 错误 500 表示“内部服务器错误”。

我猜你没有与你提供的示例代码完全相同的错误,对吗?

两个可能的原因:

  1. 服务器出现错误,例如过载/损坏的数据库/等。(不太可能)
  2. 您正在发布“奇怪的数据”并且服务器(应用程序)没有正确处理它(可能)。理论上,服务器(应用程序)应该验证发布的数据并发送 400“错误请求”。

我不认为它与机械化库有关。

编辑 如果您不关心该错误的原因并且只想捕获您可以使用的异常:

try:
    html = browser.open(post_url).read().decode('UTF-8')
except mechanize.HTTPError, e:
    # handle http errors explicit by code
    if int(e.code) == 500:
        # do nothing. Maybe you need to set "html" to empy string.
        pass
    else:
        raise e  # if http error code is not 500, reraise the exception
于 2013-07-16T12:40:53.717 回答
0

您无法修复它,只能仔细检查您正在解析的数据是否正确。

为了解决这个问题try/except

from urllib2 import HTTPError

try:
    post_url = "http://www.stackoverflow.com/"
    browser = mechanize.Browser()
    browser.set_handle_robots(False)
    browser.addheaders = [('User-agent', 'Firefox')]
    html = browser.open(post_url).read().decode('UTF-8')

except HTTPError, e:
    print "Got error code", e.code  
于 2013-07-17T08:05:37.687 回答