1. 程式人生 > >Python爬蟲入門(5):URLError異常處理

Python爬蟲入門(5):URLError異常處理

大家好,本節在這裡主要說的是URLError還有HTTPError,以及對它們的一些處理。

1.URLError

首先解釋下URLError可能產生的原因:

  • 網路無連線,即本機無法上網
  • 連線不到特定的伺服器
  • 伺服器不存在

在程式碼中,我們需要用try-except語句來包圍並捕獲相應的異常。下面是一個例子,先感受下它的風騷

Python
1234567importurllib2requset=urllib2.Request('http://www.xxxxx.com')try:urllib2.urlopen(requset)except
urllib2.URLError,e:printe.reason

我們利用了 urlopen方法訪問了一個不存在的網址,執行結果如下:

Python
1 [Errno11004]getaddrinfo failed

它說明了錯誤代號是11004,錯誤原因是 getaddrinfo failed

2.HTTPError

HTTPError是URLError的子類,在你利用urlopen方法發出一個請求時,伺服器上都會對應一個應答物件response,其中它包含一個數字”狀態碼”。舉個例子,假如response是一個”重定向”,需

定位到別的地址獲取文件,urllib2將對此進行處理。

其他不能處理的,urlopen會產生一個HTTPError,對應相應的狀態嗎,HTTP狀態碼錶示HTTP協議所返回的響應的狀態。下面將狀態碼歸結如下:

100:繼續 客戶端應當繼續傳送請求。客戶端應當繼續傳送請求的剩餘部分,或者如果請求已經完成,忽略這個響應。

101: 轉換協議 在傳送完這個響應最後的空行後,伺服器將會切換到在Upgrade 訊息頭中定義的那些協議。只有在切換新的協議更有好處的時候才應該採取類似措施。

102:繼續處理 由WebDAV(RFC 2518)擴充套件的狀態碼,代表處理將被繼續執行。

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

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

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

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

300:該狀態碼不被HTTP/1.0的應用程式直接使用, 只是作為3XX型別迴應的預設解釋。存在多個可用的被請求資源。 處理方式:若程式中能夠處理,則進行進一步處理,如果程式中不能處理,則丟棄
301:請求到的資源都會分配一個永久的URL,這樣就可以在將來通過該URL來訪問此資源 處理方式:重定向到分配的URL

302:請求到的資源在一個不同的URL處臨時儲存 處理方式:重定向到臨時的URL

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

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

401:未授權 處理方式:丟棄

403:禁止 處理方式:丟棄

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

500:伺服器內部錯誤 伺服器遇到了一個未曾預料的狀況,導致了它無法完成對請求的處理。一般來說,這個問題都會在伺服器端的原始碼出現錯誤時出現。

501:伺服器無法識別 伺服器不支援當前請求所需要的某個功能。當伺服器無法識別請求的方法,並且無法支援其對任何資源的請求。

502:錯誤閘道器 作為閘道器或者代理工作的伺服器嘗試執行請求時,從上游伺服器接收到無效的響應。

503:服務出錯 由於臨時的伺服器維護或者過載,伺服器當前無法處理請求。這個狀況是臨時的,並且將在一段時間以後恢復。

HTTPError例項產生後會有一個code屬性,這就是是伺服器傳送的相關錯誤號。
因為urllib2可以為你處理重定向,也就是3開頭的代號可以被處理,並且100-299範圍的號碼指示成功,所以你只能看到400-599的錯誤號碼。

下面我們寫一個例子來感受一下,捕獲的異常是HTTPError,它會帶有一個code屬性,就是錯誤代號,另外我們又列印了reason屬性,這是它的父類URLError的屬性。

Python
12345678importurllib2req=urllib2.Request('http://blog.csdn.net/cqcre')try:urllib2.urlopen(req)excepturllib2.HTTPError,e:printe.codeprinte.reason

執行結果如下

Python
1 2 403 Forbidden

錯誤代號是403,錯誤原因是Forbidden,說明伺服器禁止訪問。

我們知道,HTTPError的父類是URLError,根據程式設計經驗,父類的異常應當寫到子類異常的後面,如果子類捕獲不到,那麼可以捕獲父類的異常,所以上述的程式碼可以這麼改寫

Python
123

相關推薦

Python爬蟲入門5URLError異常處理

大家好,本節在這裡主要說的是URLError還有HTTPError,以及對它們的一些處理。 1.URLError 首先解釋下URLError可能產生的原因: 網路無連線,即本機無法上網連線不到特定的伺服器伺服器不存在 在程式碼中,我們需要用

Python爬蟲入門1綜述

大家好哈,最近博主在學習Python,學習期間也遇到一些問題,獲得了一些經驗,在此將自己的學習系統地整理下來,如果大家有興趣學習爬蟲的話,可以將這些文章作為參考,也歡迎大家一共分享學習經驗。 Python版本:2.7,Python 3請另尋其他博文。 首先爬蟲是什麼?

Python爬蟲開發零基礎入門

0×00 介紹 本人對於Python學習建立了一個小小的學習圈子,為各位提供了一個平臺,大家一起來討論學習Python。歡迎各位到來Python學習群:960410445一起討論視訊分享學習。Python是未來的發展方向,正在挑戰我們的分析能力及對世界的認知方式,因此,我們與時俱進,迎接變化,並

Python爬蟲系列從零開始,安裝環境

tar 公司 pip nal 網頁 解析 目標 http caption 在上一個系列,我們學會使用rabbitmq。本來接著是把公司的celery分享出來,但是定睛一看,celery4.0已經不再支持Windows。公司也逐步放棄了服役多年的celery項目。恰好,公司找

Python爬蟲系列Beautiful Soup解析HTML之把HTML轉成Python對象

調用 nor 結束 版本 現在 name屬性 data 官方文檔 get 在前幾篇文章,我們學會了如何獲取html文檔內容,就是從url下載網頁。今天開始,我們將討論如何將html轉成python對象,用python代碼對文檔進行分析。 (牛小妹在學校折騰了好幾天,也沒把h

Python 爬蟲實戰使用 requests-html

分享 -html 調用 交流 html 技術 python-re find 自己的 Python 爬蟲實戰(一):使用 requests 和 BeautifulSoup,我們使用了 requests 做網絡請求,拿到網頁數據再用 BeautifulSoup 解析,就在前不久

Python爬蟲入門寫在前面

一、前言 你是不是在為想收集資料而不知道如何收集而著急? 你是不是在為想學習爬蟲而找不到一個專門為小白寫的教程而煩惱? Bingo! 你沒有看錯,這就是專門面向小白學習爬蟲而寫的!我會採用例項的方式,把每個部分都跟實際的例子結合起來幫助小夥伴兒們理解。最後再寫幾個實戰的

Python爬蟲開發爬蟲措施以及爬蟲編寫注意事項

0×01 介紹 本人對於Python學習建立了一個小小的學習圈子,為各位提供了一個平臺,大家一起來討論學習Python。歡迎各位到來Python學習群:960410445一起討論視訊分享學習。Python是未來的發展方向,正在挑戰我們的分析能力及對世界的認知方式,因此,我們與時俱進,迎接變化,並

Python爬蟲開發動態載入頁面的解決方案與爬蟲代理

0×00 前言 如果讀者讀過我前面的關於爬蟲的文章,應該大概都清楚我們現在可以對一個靜態的web頁面”為所欲為“了,但是技術的發展總是沒有止境的,僅僅是這樣對靜態頁面處理遠遠不夠,要知道現在很多的web頁面有意無意為了防止靜態爬蟲使用ajax技術動態載入頁面,這就導致了在面對這些網站的時候,我們

Python爬蟲開發資料儲存以及多執行緒

0×00 介紹 本文我們就兩個方面來討論如何改進我們的爬蟲:資料儲存和多執行緒,當然我承認這是為我們以後要討論的一些東西做鋪墊。 本人對於Python學習建立了一個小小的學習圈子,為各位提供了一個平臺,大家一起來討論學習Python。歡迎各位到來Python學習群:960410445一起討論

Python爬蟲開發整站爬蟲與Web挖掘

0×00 介紹 在網際網路這個複雜的環境中,搜尋引擎本身的爬蟲,出於個人目的的爬蟲,商業爬蟲肆意橫行,肆意掠奪網上的或者公共或者私人的資源。顯然資料的收集並不是為所欲為,有一些協議或者原則還是需要每一個人注意。本文主要介紹關於爬蟲的一些理論和約定協議,然後相對完整完成一個爬蟲的基本功能。 本

python爬蟲入門Opener和Requests

Handler和Opener Handler處理器和自定義Opener opener是urllib2.OpenerDirector的例項,我們之前一直在使用urlopen,它是一個特殊的opener(也就是我們構建好的)。 但是urlopen()方法不支援代理、cookie等其他的HTTP/GTTPS高

python爬蟲入門Selenium模擬使用者操作

爬蟲(Spider),反爬蟲(Anti-Spider),反反爬蟲(Anti-Anti-Spider) 之間恢巨集壯闊的鬥爭... 小莫想要某站上所有的電影,寫了標準的爬蟲(基於HttpClient庫),不斷地遍歷某站的電影列表頁面,根據 Html 分析電影名字存進自己的資料庫。 這個站

python爬蟲入門利用多執行緒爬蟲

#!/usr/bin/env python # -*- coding:utf-8 -*- # 使用了執行緒庫 import threading # 佇列 from Queue import Queue # 解析庫 from lxml import etree # 請求處理 impor

python爬蟲入門XPATH和BeautifulSoup4

 XML和XPATH 用正則處理HTML文件很麻煩,我們可以先將 HTML檔案 轉換成 XML文件,然後用 XPath 查詢 HTML 節點或元素。 XML 指可擴充套件標記語言(EXtensible Markup Language) XML 是一種標記語言,很類似 HTML XML 的設計宗旨是

Python爬蟲入門

Python爬蟲入門(一) 1.適配環境 1.1.ubuntu入門 1.2 vim入門 2.HTML 2.1連結標籤 2.2 table標籤 2.3 DOM屬性 2.4 CSS

Python】打響2019年第二炮-Python爬蟲入門

打響2019第二炮-Python爬蟲入門   在2019年第一炮文章中獲取到了京東商城某一臺電腦的列表資訊,並儲存到CSV能夠更方便的檢視如下: 本章內容主要解決,如何多頁獲取手機&電腦資料,獲取評價以及好評率等資訊,實現效果如下: 如何獲取評論資訊?

Python】打響2019年第一炮-Python爬蟲入門

打響2019第一炮-Python爬蟲入門   2018年已經成為過去,還記得在2018年新年寫過一篇【Shell程式設計】打響2018第一炮-shell程式設計之for迴圈語句,那在此時此刻,也是寫一篇關於程式設計方面,不過要比18年的稍微高階點。 So,mark一下,也希望對

Python】打響2019年第三炮-Python爬蟲入門

打響2019年第三炮-Python爬蟲入門   今晚喝了點茶,也就是剛剛,喝茶過程中大腦中溢位一個想法,茶中有茶葉,也有茶水,在茶水入口的一瞬間我不能直接喝進去,因為直接喝進去會帶著茶葉喝進去會很難受。這可能是一句廢話。   本章主要解決第一炮、第二炮遺留下來的問題,該如何

Python爬蟲手記全球行情實時監控

問題描述: 以重要經濟引數為例,進一步鞏固爬蟲和資料庫使用技巧:完成對國際現貨與期貨石油價格、美元人民幣匯率、美元指數等資料的實時監控,取樣頻率為一小時一次,相關資料的取樣頁面需要自己搜尋。 看到問題,心裡大概就有一個底了:首先找到一個網頁能顯示原油價格,找到其url,然後