【问题标题】:Script fails randomly due to urllib.error.HTTPError: HTTP Error 302由于 urllib.error.HTTPError,脚本随机失败:HTTP 错误 302
【发布时间】:2024-07-17 13:15:01
【问题描述】:

我有一个奇怪的问题,我已经尝试“google-out”几个小时了。
我也尝试了 stack 上类似主题的解决方案,但仍然没有积极的结果:

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

所以情况是我想从某个网页下载整套文章。它具有正确内容的子链接只有一个数字不同,所以我循环整个范围(1 到 400 000)并将 html 写入文件。这里重要的是这个网页需要重新发送 cookie 才能获得正确的 url,在 How to use Python to login to a webpage and retrieve cookies for later usage? 的讲座之后,我已经完成了。

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

response = meth(req, response)
文件“/usr/lib/python3.1/urllib/request.py”,第 468 行,在 http_response
'http'、请求、响应、代码、味精、hdrs)
....
文件“/usr/lib/python3.1/urllib/request.py”,第 553 行,在 http_error_302 self.inf_msg + msg, headers, fp)
urllib.error.HTTPError: HTTP Error 302: The HTTP 服务器返回一个重定向错误,会导致无限循环。
最后 30x 错误消息是:
找到

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

这是来自服务器的 curl 输出:
$ 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

有些人建议使用 mechanize 或尝试捕获异常,但我不知道如何做到这一点,其他人说错误是由错误的 cookie 处理引起的,但我也尝试使用 urllib2 和 @“手动”获取和发送 cookie 987654325@ 具有相似的结果。 我想知道我的for 循环和短暂睡眠是否会导致脚本有时失败..
Anwyay - 任何帮助表示赞赏。

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

编辑:

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

尝试: #这里打开网址 除了 any_HTTPError: 经过

每次我使用 url.open 指令时。

即将关闭。

【问题讨论】:

  • “即将关闭”是什么意思?
  • 然后你可以回答你自己的问题并接受你的回答。

标签: python http cookies web-scraping urllib


【解决方案1】:

让我建议另一种解决方案: 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 Location 标头。

【讨论】: