簡體   English   中英

urllib.error.HTTPError: HTTP 錯誤 403: 使用 urllib.requests 禁止

[英]urllib.error.HTTPError: HTTP Error 403: Forbidden with urllib.requests

我正在嘗試從互聯網上讀取圖像 URL 並能夠通過 python 將圖像放到我的機器上,我使用了此博客文章中使用的示例Z5E056C500A1C4B6A7110B50eekD807BADE.org5Z/-to-eekD807BADE.org5Z image-from-the-url-in-pil/https://media.geeksforgeeks.org/wp-content/uploads/20210318103632/gfg-300x300.png但是,當我嘗試自己的示例時,它只是沒有t 似乎工作我已經嘗試過 HTTP 版本,它仍然給我 403 錯誤。 有誰知道可能是什么原因?

import urllib.request

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

Output:

urllib.error.HTTPError: HTTP 錯誤 403: 禁止

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 ,但沒有奏效。 你不會總是遇到這個問題(只要你是合理的,大多數網站在他們允許的范圍內都非常寬松),但是當你這樣做時,嘗試使用用戶代理。 如果沒有任何效果,請嘗試使用與瀏覽器相同的用戶代理。

我遇到了同樣的問題,這是由於 URL 過期所致。 我檢查了響應文本,我收到了“URL 簽名已過期”,這是您通常不會看到的消息,除非您檢查了響應文本。

這意味着某些 URL 會過期,通常是出於安全目的。 嘗試再次獲取 URL 並在腳本中更新 URL。 如果您要抓取的內容沒有新的 URL ,那么很遺憾您無法抓取它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM