摘要:一的處理出現(xiàn)產(chǎn)生的原因很多,比如網(wǎng)絡(luò)沒法連接,連接不到服務(wù)器,或者服務(wù)器不存在。二的使用,一般是某些網(wǎng)站為了辨別用戶身份,進行跟蹤,從而存儲在客戶端的數(shù)據(jù)。模塊的主要作用是提供可存儲的對象,以便于與模塊配合使用來訪問資源。
一、urlError的處理
出現(xiàn)urlError產(chǎn)生的原因很多,比如:網(wǎng)絡(luò)沒法連接,連接不到服務(wù)器,或者服務(wù)器不存在。
在代碼中,我們需要用try-except的語句來捕獲相應(yīng)的異常
import urllib2 req = urllib2.Request("http://blog.csdn.net/cqcre") try: urllib2.urlopen(req) except urllib2.HTTPError, e:#使用hasattr屬性判斷code是否存在 print e.code except urllib2.URLError, e: print e.reason else: print "OK"
上述代碼,可以看到httperror,這里HTTPError是URLError的子類,在你利用urlopen方法發(fā)出一個請求時,服務(wù)器上都會對應(yīng)一個應(yīng)答對象response,其中它包含一個數(shù)字”狀態(tài)碼”。舉個例子,假如response是一個”重定向”,需定位到別的地址獲取文檔,urllib2將對此進行處理,此處需要了解HTTP狀態(tài)碼相關(guān)知識。
二、Cookie的使用cookie,一般是某些網(wǎng)站為了辨別用戶身份,進行session跟蹤,從而存儲在客戶端的數(shù)據(jù)。比如某些網(wǎng)站需要登錄,才能訪問某些頁面。這里我們可以使用urllib2庫保存我們登錄的cookie,然后再進行抓取內(nèi)容。
2.1、Opener當你獲取一個URL你使用一個opener(一個urllib2.OpenerDirector的實例)。在前面,我們都是使用的默認的opener,也就是urlopen,它是一個特殊的opener,可以理解成opener的一個特殊實例,傳入的參數(shù)僅僅是url,data,timeout。
如果我們需要用到Cookie,只用這個opener是不能達到目的的,所以我們需要創(chuàng)建更一般的opener來實現(xiàn)對Cookie的設(shè)置。
2.2 Cookielibcookielib模塊的主要作用是提供可存儲cookie的對象,以便于與urllib2模塊配合使用來訪問Internet資源。 Cookielib模塊非常強大,我們可以利用本模塊的CookieJar類的對象來捕獲cookie并在后續(xù)連接請求時重新發(fā)送,比如可以實現(xiàn)模擬登錄 功能。該模塊主要的對象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。
它們的關(guān)系:CookieJar —-派生—->FileCookieJar —-派生—–>MozillaCookieJar和LWPCookieJar
2.2.1 獲取Cookie保存到變量import urllib2 import cookielib #聲明一個CookieJar對象實例來保存cookie cookie = cookielib.CookieJar() #利用urllib2庫的HTTPCookieProcessor對象來創(chuàng)建cookie處理器 handler=urllib2.HTTPCookieProcessor(cookie) #通過handler來構(gòu)建opener opener = urllib2.build_opener(handler) #此處的open方法同urllib2的urlopen方法,也可以傳入request response = opener.open("http://www.baidu.com") for item in cookie: print "Name = "+item.name print "Value = "+item.value2.2.2 保存Cookie到文件
import cookielib import urllib2 #設(shè)置保存cookie的文件,同級目錄下的cookie.txt filename = "cookie.txt" #聲明一個MozillaCookieJar對象實例來保存cookie,之后寫入文件 cookie = cookielib.MozillaCookieJar(filename) #利用urllib2庫的HTTPCookieProcessor對象來創(chuàng)建cookie處理器 handler = urllib2.HTTPCookieProcessor(cookie) #通過handler來構(gòu)建opener opener = urllib2.build_opener(handler) #創(chuàng)建一個請求,原理同urllib2的urlopen response = opener.open("http://www.baidu.com") #保存cookie到文件 cookie.save(ignore_discard=True, ignore_expires=True)
ignore_discard的意思是即使cookies將被丟棄也將它保存下來,ignore_expires的意思是如果在該文件中 cookies已經(jīng)存在,則覆蓋原文件寫入
2.2.3 從文件中讀取cookieimport cookielib import urllib2 #創(chuàng)建MozillaCookieJar實例對象 cookie = cookielib.MozillaCookieJar() #從文件中讀取cookie內(nèi)容到變量 cookie.load("cookie.txt", ignore_discard=True, ignore_expires=True) #創(chuàng)建請求的request req = urllib2.Request("http://www.baidu.com") #利用urllib2的build_opener方法創(chuàng)建一個opener opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) response = opener.open(req) print response.read()
這一篇又折騰折騰,結(jié)束了,可能看起來比較無聊,都是為了接下來的各種實戰(zhàn)來做準備的,從下一篇開始,正式的進行網(wǎng)站的爬蟲了。
推薦閱讀:【爬蟲系列之一】爬蟲開發(fā)環(huán)境的搭建
【爬蟲系列之二】python基礎(chǔ)知識的了解
更多精彩內(nèi)容,歡迎大家關(guān)注我的微信公眾號:喝醉的清茶
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/41853.html
摘要:下面我們傳入多個參數(shù)構(gòu)建一個來感受一下在這里我們通過四個參數(shù)構(gòu)造了一個,即請求,在中指定了和,傳遞的參數(shù)用了和方法來轉(zhuǎn)成字節(jié)流,另外指定了請求方式為。運行結(jié)果如下通過觀察結(jié)果可以發(fā)現(xiàn),我們成功設(shè)置了,以及。用于處理重定向。 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---19、代理基本原理下一篇文章:Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---21、使用Urllib:處理異常 學習爬蟲,最初的操作便...
摘要:楚江數(shù)據(jù)是專業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學爬蟲技術(shù)以供學習,。本文來源知乎作者路人甲鏈接楚江數(shù)據(jù)提供網(wǎng)站數(shù)據(jù)采集和爬蟲軟件定制開發(fā)服務(wù),服務(wù)范圍涵蓋社交網(wǎng)絡(luò)電子商務(wù)分類信息學術(shù)研究等。 楚江數(shù)據(jù)是專業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學爬蟲技術(shù)以供學習,http://www.chujiangdata.com。 第一:Python爬蟲學習系列教程(來源于某博主:htt...
摘要:最后用來處理正常的邏輯,這是一個較好的異常處理寫法。上一篇文章網(wǎng)絡(luò)爬蟲實戰(zhàn)使用發(fā)送請求下一篇文章網(wǎng)絡(luò)爬蟲實戰(zhàn)使用解析鏈接 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---20、使用Urllib:發(fā)送請求下一篇文章:Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---22、使用Urllib:解析鏈接 在前面一節(jié)我們了解了 Request 的發(fā)送過程,但是在網(wǎng)絡(luò)情況不好的情況下,出現(xiàn)了異常怎么辦呢?這時如果我們...
摘要:如果要添加該參數(shù),并且如果它是字節(jié)流編碼格式的內(nèi)容,即類型,則需要通過方法轉(zhuǎn)化。通過的格式將字典進行字節(jié)流的編碼,將編碼后的字節(jié)流數(shù)據(jù)傳輸?shù)街付ㄟ@里存在一個,要進行指定方式解碼。第二個參數(shù)如果要傳,必須傳字節(jié)流類型的。 請求頭中的內(nèi)容: Date: 標識 響應(yīng)產(chǎn)生 的時間 。 Last-Modified: 指定資源的最后修改時間。 Content-Encoding: 指定 響應(yīng) 內(nèi)容...
摘要:本系列以為基礎(chǔ)是的標準網(wǎng)絡(luò)請求庫。包含了網(wǎng)絡(luò)數(shù)據(jù)請求,處理改變請求頭和用戶代理,重定向,認證等的函數(shù)。超時單位為秒?yún)?shù)必須是的實例返回值返回一個可以作為的對象。返回的個部分,分別是機制網(wǎng)絡(luò)位置路徑路徑段參數(shù)查詢片段。 本系列以python3.4為基礎(chǔ)urllib是Python3的標準網(wǎng)絡(luò)請求庫。包含了網(wǎng)絡(luò)數(shù)據(jù)請求,處理cookie,改變請求頭和用戶代理,重定向,認證等的函數(shù)。urlli...
閱讀 756·2023-04-26 01:30
閱讀 3307·2021-11-24 10:32
閱讀 2193·2021-11-22 14:56
閱讀 1988·2021-11-18 10:07
閱讀 561·2019-08-29 17:14
閱讀 632·2019-08-26 12:21
閱讀 3111·2019-08-26 10:55
閱讀 2947·2019-08-23 18:09