由于urllib.error.HTTPError:HTTP错误302,脚本随机失败

时间:2012-10-17 11:44:34

标签: python http cookies web-scraping urllib

我有一个奇怪的问题,我一直试图'谷歌退出'几个小时 我在堆栈上尝试了类似主题的解决方案,但仍然没有正面结果:

  

How do I set cookies using Python urlopen?
  Handling rss redirects with Python/urllib2

所以案例是我想从一些网页下载整套文章。它的具有适当内容的子链接只有一个数字,所以我循环整个范围(1到400 000)并将html写入文件。这里的重要信息是这个网页需要重新发送cookie以获得正确的网址,并且在How to use Python to login to a webpage and retrieve cookies for later usage?的演讲之后我完成了这项工作。

但有时我的脚本会返回错误:

  

response = meth(req,response)
  在http_response中输入文件“/usr/lib/python3.1/urllib/request.py”,第468行      'http',请求,响应,代码,消息,hdrs)
  ....
  文件“/usr/lib/python3.1/urllib/request.py”,第553行,http_error_302 self.inf_msg + msg,headers,fp)
   urllib.error.HTTPError:HTTP错误302:HTTP服务器返回了导致无限循环的重定向错误。
  最后30x错误消息是:
  的实测值

这个问题难以重现,因为脚本通常可以正常工作,但是在几千个'for循环'后它会随机发生。

这是来自服务器的curl ouptut:
$ curl -I "http://my.url/"
HTTP/1.1 200 OK
Date: Wed, 17 Oct 2012 10:14:13 GMT
Server: Apache/2.2.15 (Oracle)
X-Powered-By: PHP/5.3.3
Set-Cookie: Kuuxk=ae7s3isu2cEshhijte4nb1clk5; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Connection: close
Content-Type: text/html; charset=UTF-8

有些人建议使用机械化或尝试捕获异常,但我不知道如何做到这一点,其他人说错误是由错误的cookie处理引起的,但我也尝试使用urllib2和{手动'获取和发送cookie {1}}具有类似的结果。 我想知道我的add_header('cookie', cookie)循环和短暂睡眠可能会导致脚本失败一次。
Anwyay - 任何帮助赞赏。

编辑:
如果这可能有效 - 如何捕获异常并尝试忽略它?

编辑:

只需忽略此错误即可解决问题。没有一切顺利。
我用了

    try:  
        #here open url  
    except any_HTTPError:  
        pass  

每次我使用url.open指令。

待关闭。

1 个答案:

答案 0 :(得分:0)

让我建议另一个解决方案: HTTP状态代码302表示Found redirection(请参阅:https://en.wikipedia.org/wiki/HTTP_302)。

例如: HTTP/1.1 302 Found Location: http://www.iana.org/domains/example/

您可以抓取Location标题并尝试获取此网址。

有8个重定向状态代码(301-308)。如果301< = status code< = 308。

,您可以使用Location标头