搜尋
首頁後端開發php教程[Python]網路爬蟲(三):異常的處理與HTTP狀態碼的分類

先來說一說HTTP的異常處理問題。
當urlopen不能夠處理一個response時,產生urlError。
不過通常的Python APIs異常如ValueError,TypeError等也會同時產生。
HTTPError是urlError的子類,通常在特定HTTP URLs中產生。
 
1.URLError
通常,URLError在沒有網路連線(沒有路由到特定伺服器),或伺服器不存在的情況下產生。

這種情況下,異常同樣會帶有"reason"屬性,它是一個tuple(可以理解為不可變的數組),

包含了一個錯誤號碼和一個錯誤訊息。

我們建造一個urllib2_test06.py來感受一下異常的處理:

[python] view plaincopy

  1. import urllib2  
  2.   
  3.   
  4.   
  5. try
  6. : urllib2.urlopen(req)  
  7.   
  8. ex     
  9. print
  10.  e.reason  
  11. 按下F5,可以看到印出來的內容是:
  12. [Errno 11001] getaddrinfo failed

也就是說,錯誤號碼是11001,內容是getaddrinfo failed .HTTPError伺服器上每一個HTTP 應答物件response包含一個數字"狀態碼"。


有時狀態碼指出伺服器無法完成請求。預設的處理器會為你處理一部分這種應答。

例如:假如response是一個"重定向",需要客戶端從別的地址獲取文檔,urllib2將為你處理。

其他不能處理的,urlopen會產生一個HTTPError。

典型的錯誤包含"404"(頁面無法找到),"403"(請求禁止),和"401"(帶驗證請求)。

HTTP狀態碼表示HTTP協定所傳回的回應的狀態。

例如客戶端向伺服器發送請求,如果成功地取得請求的資源,則回傳的狀態碼為200,表示回應成功。

如果請求的資源不存在, 則通常回傳404錯誤。

HTTP狀態碼通常分為5種類型,分別以1~5五個數字開頭,由3位整數組成:

---------------- -------------------------------------------------- ------------------------------

200:請求成功     處理方式:獲得回應的內容,進行處理 

201:請求完成,結果是建立了新資源。新創建資源的URI可在回應的實體中得到   處理方式:爬蟲中不會遇到 

202:請求被接受,但處理尚未完成   處理方式:阻塞等待 

204:伺服器端已經實現了請求,但是沒有返回新的資訊。如果客戶是使用者代理,則無須為此更新自身的文件視圖。    處理方式:丟棄

300:此狀態碼不被HTTP/1.0的應用程式直接使用, 只是作為3XX類型回應的預設解釋。存在多個可用的被請求資源。處理方式:若程序中能夠處理,則進行進一步處理,如果程序中不能處理,則丟棄

301:請求到的資源都會分配一個永久的URL,這樣就可以在將來通過該URL來訪問此資源    處理方式:重定向到分配的URL302:請求到的資源在一個不同的URL處暫時保存    處理方式:重定向到暫時的URL 

304 請求的資源未更新    處理方式:丟棄 

400 非法請求    處理方式:丟棄 

    處理方式:丟棄 

404 沒有找到    處理方式:丟棄 

5XX 回應代碼以「5」開頭的狀態碼表示伺服器端發現自己出現錯誤,無法繼續執行請求   處理方式:丟棄


-------------------------------------------------- -----------------------------------------

HTTPError實例產生後會有一個整數'code'屬性,是伺服器發送的相關錯誤號碼。

Error Codes錯誤碼因為預設的處理器處理了重定向(300以外號碼),並且100-299範圍的號碼指示成功,所以你只能看到400-599的錯誤號碼。

BaseHTTPServer.BaseHTTPRequestHandler.response是一個很有用的應答號碼字典,顯示了HTTP協定所使用的所有的應答號碼。

當一個錯誤號碼產生後,伺服器傳回一個HTTP錯誤號,和一個錯誤頁面。



你可以使用HTTPError實例作為頁面傳回的應答物件response。

這表示和錯誤屬性一樣,它同樣包含了read,geturl,和info方法。


我們建造一個urllib2_test07.py來感受一下:

plaincopy

import

 urllib2  

req = urllib2
  1.   try
  2. :  
  3.     urllib2.urlopen(req)  
  4.   
  5.       
  6. print
  7.  e.code  
  8.  e.code  
  9.  e.code   e.code  
  10.     
  11. #print e.read()
  12.   
  13. 按F5頁可看見輸出了404的錯誤碼,也說沒有找到這個碼數。 3.Wrapping

所以如果你想為HTTPError或URLError做準備,將有兩個基本的辦法。推薦使用第二種。



我們建造一個urllib2_test08.py來示範一下第一個異常處理的方案: plaincopy

  1. 來自 urllib2 導入 請求, urlopen,URLError,HTTPError   'http://bbs.c sdn.net/callmewhy'
  2. )
  3.   嘗試
  4. :   
  5.   
  6. 除了
  7.  HTTPError,e:  
  8.     
  9. 列印
  10.  「伺服器無法滿足請求。」  印刷
  11.  '錯誤代碼:'
  12. ,e.code     除了
  13. URL錯誤,e:  
  14.   到伺服器。  '原因:',e.原因  
  15.   
  16.     印刷
  17.  
  18. 「沒有引發異常。」
  19.   
  20.     # 一切都很好  
  21. 和其他語言,請嘗試解決異常並將其內容打印出來。
  22. 這裡要注意的一點,除了HTTPError必須在第一個,否則除了 URLError 將同樣接受到HTTPError 因為HTTPError是URLError的子類,如果URLError在前面它會捕獲到所有的URLError(包括HTTPError )。
  23. 我們建了一個異常合
  24. [python] view 純文字
    1. 來自 urllib2 導入 請求, urlopen,URLError,HTTPError   'http://bbs.c sdn.net/callmewhy'
    2. )
    3.     嘗試
    4. :    回應 = urlopen(req)    
    5.     除了
    6.     
    7. if hasattr(e, 
    8. '代碼'): 
    9.         列印 「伺服器無法滿足要求。」
    10.     
    11.     
    12.             
    13.  
    14. '錯誤代碼: 
    15.     elif hasattr(e, '原因') :  
    16.     
    17.         列印 '我們無法連接到伺服器中。 '    
    18.     
    19.                  
    20.     
    21. 印刷  「沒有出現異常。」     
    22. 以上就介紹了[Python]網路爬蟲(三):異常的處理和HTTP狀態碼的分類,包括方面的內容,希望對PHP教程有興趣的朋友得到幫助。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何檢查PHP會話是否已經開始?如何檢查PHP會話是否已經開始?Apr 30, 2025 am 12:20 AM

在PHP中,可以使用session_status()或session_id()來檢查會話是否已啟動。 1)使用session_status()函數,如果返回PHP_SESSION_ACTIVE,則會話已啟動。 2)使用session_id()函數,如果返回非空字符串,則會話已啟動。這兩種方法都能有效地檢查會話狀態,選擇使用哪種方法取決於PHP版本和個人偏好。

描述一個場景,其中使用會話在Web應用程序中至關重要。描述一個場景,其中使用會話在Web應用程序中至關重要。Apr 30, 2025 am 12:16 AM

sessionsarevitalinwebapplications,尤其是在commercePlatform之前。

如何管理PHP中的並發會話訪問?如何管理PHP中的並發會話訪問?Apr 30, 2025 am 12:11 AM

在PHP中管理並發會話訪問可以通過以下方法:1.使用數據庫存儲會話數據,2.採用Redis或Memcached,3.實施會話鎖定策略。這些方法有助於確保數據一致性和提高並發性能。

使用PHP會話的局限性是什麼?使用PHP會話的局限性是什麼?Apr 30, 2025 am 12:04 AM

PHPsessionshaveseverallimitations:1)Storageconstraintscanleadtoperformanceissues;2)Securityvulnerabilitieslikesessionfixationattacksexist;3)Scalabilityischallengingduetoserver-specificstorage;4)Sessionexpirationmanagementcanbeproblematic;5)Datapersis

解釋負載平衡如何影響會話管理以及如何解決。解釋負載平衡如何影響會話管理以及如何解決。Apr 29, 2025 am 12:42 AM

負載均衡會影響會話管理,但可以通過會話複製、會話粘性和集中式會話存儲解決。 1.會話複製在服務器間複製會話數據。 2.會話粘性將用戶請求定向到同一服務器。 3.集中式會話存儲使用獨立服務器如Redis存儲會話數據,確保數據共享。

說明會話鎖定的概念。說明會話鎖定的概念。Apr 29, 2025 am 12:39 AM

Sessionlockingisatechniqueusedtoensureauser'ssessionremainsexclusivetooneuseratatime.Itiscrucialforpreventingdatacorruptionandsecuritybreachesinmulti-userapplications.Sessionlockingisimplementedusingserver-sidelockingmechanisms,suchasReentrantLockinJ

有其他PHP會議的選擇嗎?有其他PHP會議的選擇嗎?Apr 29, 2025 am 12:36 AM

PHP會話的替代方案包括Cookies、Token-basedAuthentication、Database-basedSessions和Redis/Memcached。 1.Cookies通過在客戶端存儲數據來管理會話,簡單但安全性低。 2.Token-basedAuthentication使用令牌驗證用戶,安全性高但需額外邏輯。 3.Database-basedSessions將數據存儲在數據庫中,擴展性好但可能影響性能。 4.Redis/Memcached使用分佈式緩存提高性能和擴展性,但需額外配

在PHP的上下文中定義'會話劫持”一詞。在PHP的上下文中定義'會話劫持”一詞。Apr 29, 2025 am 12:33 AM

Sessionhijacking是指攻擊者通過獲取用戶的sessionID來冒充用戶。防範方法包括:1)使用HTTPS加密通信;2)驗證sessionID的來源;3)使用安全的sessionID生成算法;4)定期更新sessionID。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具