urllib.error.HTTPError:HTTP 错误 403:禁止使用 urllib.requests

问题描述 投票:0回答:2

我正在尝试从互联网上读取图像 URL,并能够通过 python 将图像获取到我的机器上,我使用了本博客文章中使用的示例 https://www.geeksforgeeks.org/how-to-open- an-image-from-the-url-in-pil/https://media.geeksforgeeks.org/wp-content/uploads/20210318103632/gfg-300x300.png,但是,当我尝试自己的例如,它似乎不起作用我已经尝试了 HTTP 版本,但它仍然给我 403 错误。有谁知道可能是什么原因吗?

import urllib.request

urllib.request.urlretrieve(
  "http://image.prntscr.com/image/ynfpUXgaRmGPwj5YdZJmaw.png",
   "gfg.png")

输出:

urllib.error.HTTPError:HTTP 错误 403:禁止

python python-requests urllib urllib2 http-status-code-403
2个回答
11
投票

prntscr.com
的服务器正在主动拒绝您的请求。造成这种情况的原因有很多。有些网站会检查调用者的用户代理,看看是否是这种情况。就我而言,我使用 httpie 来测试它是否允许我通过非浏览器应用程序下载。它起作用了。因此,我只是重新使用了一个用户标头,看看是否只是缺少用户代理。

import urllib.request

opener = urllib.request.build_opener()
opener.addheaders = [('User-Agent', 'MyApp/1.0')]
urllib.request.install_opener(opener)
urllib.request.urlretrieve(
  "http://image.prntscr.com/image/ynfpUXgaRmGPwj5YdZJmaw.png",
   "gfg.png")

成功了!现在我不知道服务器使用什么逻辑。例如,我尝试了标准的

Mozilla/5.0
,但没有成功。您不会总是遇到这个问题(只要您合理,大多数网站所允许的内容都相当宽松),但是当您遇到时,请尝试使用用户代理。如果不起作用,请尝试使用与您的浏览器相同的用户代理。


0
投票

我也遇到了同样的问题,这是由于 URL 过期造成的。我检查了响应文本,收到“URL 签名已过期”消息,除非您检查响应文本,否则您通常不会看到这条消息。

这意味着某些 URL 刚刚过期,通常是出于安全目的。尝试再次获取 URL 并更新脚本中的 URL。如果您尝试抓取的内容没有新的 URL,那么很遗憾您无法抓取它。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.