使用urllib2的Python HTTP错误429

2024-05-14 07:32:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用以下代码来解析重定向以返回链接的最终url

def resolve_redirects(url):
    return urllib2.urlopen(url).geturl()

不幸的是,我有时会得到HTTPError: HTTP Error 429: Too Many Requests。有什么好方法可以解决这个问题?以下是好的还是有更好的方法。在

^{pr2}$

另外,如果except块中出现异常,会发生什么情况?在


Tags: 方法代码httpurlreturn链接deferror
2条回答

这是一种很好的处理异常的方法,不过你应该检查一下,确保你在对给定网站的请求之间总是有适当的睡眠时间(例如twitter限制了每分钟的请求量,并在api文档中清楚地显示了这个数量)。所以只要确保你总是睡得够久。在

要从异常中的异常中恢复,只需嵌入另一个try/catch块:

def resolve_redirects(url):
    try:
        return urllib2.urlopen(url).geturl()
    except HTTPError:
        time.sleep(5)
        try:
            return urllib2.urlopen(url).geturl()
        except HTTPError:
            return "Failed twice :S"

编辑:正如@jesse-w-at-z指出的,在第二个错误情况下,您应该返回一个URL,我发布的代码只是一个如何编写嵌套try/catch的参考示例。在

在重新尝试之前,最好确保HTTP代码实际上是429。在

可以这样做:

def resolve_redirects(url):
    try:
        return urllib2.urlopen(url).geturl()
    except HTTPError, e:
        if e.code == 429:
             time.sleep(5);
             return resolve_redirects(url)
        raise

这也将允许任意次数的重试(可能需要也可能不需要)。在

https://docs.python.org/2/howto/urllib2.html#httperror

相关问题 更多 >

    热门问题