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