首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一次又一次地机械化随机出错?

一次又一次地机械化随机出错?
EN

Stack Overflow用户
提问于 2013-07-16 20:34:59
回答 2查看 2.2K关注 0票数 1

我正在使用mechanize库来模拟浏览器来获取html,如下所示,但是我总是得到一个错误...

错误的代码:

代码语言:javascript
复制
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')

错误:

代码语言:javascript
复制
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
>>> 

有人知道如何修复/避免这个错误吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-16 20:40:54

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

我猜您提供的示例代码没有错误,对吗?

两个可能的原因:

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

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

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

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2013-07-17 16:05:38

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

要解决此问题,请使用try/except

代码语言:javascript
复制
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  
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17676677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档