【爬蟲系列之三】URLError異常處理以及Cookie的使用

1、urlError的處理

出現urlError產生的緣由不少,好比:網絡無法鏈接,鏈接不到服務器,或者服務器不存在。
在代碼中,咱們須要用try-except的語句來捕獲相應的異常python

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方法發出一個請求時,服務器上都會對應一個應答對象response,其中它包含一個數字」狀態碼」。舉個例子,假如response是一個」重定向」,需定位到別的地址獲取文檔,urllib2將對此進行處理,此處須要瞭解HTTP狀態碼相關知識。segmentfault

2、Cookie的使用

cookie,通常是某些網站爲了辨別用戶身份,進行session跟蹤,從而存儲在客戶端的數據。好比某些網站須要登陸,才能訪問某些頁面。這裏咱們可使用urllib2庫保存咱們登陸的cookie,而後再進行抓取內容。服務器

2.一、Opener

當你獲取一個URL你使用一個opener(一個urllib2.OpenerDirector的實例)。在前面,咱們都是使用的默認的opener,也就是urlopen,它是一個特殊的opener,能夠理解成opener的一個特殊實例,傳入的參數僅僅是url,data,timeout。微信

若是咱們須要用到Cookie,只用這個opener是不能達到目的的,因此咱們須要建立更通常的opener來實現對Cookie的設置。cookie

2.2 Cookielib

cookielib模塊的主要做用是提供可存儲cookie的對象,以便於與urllib2模塊配合使用來訪問Internet資源。 Cookielib模塊很是強大,咱們能夠利用本模塊的CookieJar類的對象來捕獲cookie並在後續鏈接請求時從新發送,好比能夠實現模擬登陸 功能。該模塊主要的對象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。網絡

它們的關係:CookieJar —-派生—->FileCookieJar —-派生—–>MozillaCookieJar和LWPCookieJarsession

2.2.1 獲取Cookie保存到變量

import urllib2
import cookielib
#聲明一個CookieJar對象實例來保存cookie
cookie = cookielib.CookieJar()
#利用urllib2庫的HTTPCookieProcessor對象來建立cookie處理器
handler=urllib2.HTTPCookieProcessor(cookie)
#經過handler來構建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.value

2.2.2 保存Cookie到文件

import cookielib
import urllib2

#設置保存cookie的文件,同級目錄下的cookie.txt
filename = 'cookie.txt'
#聲明一個MozillaCookieJar對象實例來保存cookie,以後寫入文件
cookie = cookielib.MozillaCookieJar(filename)
#利用urllib2庫的HTTPCookieProcessor對象來建立cookie處理器
handler = urllib2.HTTPCookieProcessor(cookie)
#經過handler來構建opener
opener = urllib2.build_opener(handler)
#建立一個請求,原理同urllib2的urlopen
response = opener.open("http://www.baidu.com")
#保存cookie到文件
cookie.save(ignore_discard=True, ignore_expires=True)

ignore_discard的意思是即便cookies將被丟棄也將它保存下來,ignore_expires的意思是若是在該文件中 cookies已經存在,則覆蓋原文件寫入網站

2.2.3 從文件中讀取cookie

import cookielib
import urllib2

#建立MozillaCookieJar實例對象
cookie = cookielib.MozillaCookieJar()
#從文件中讀取cookie內容到變量
cookie.load('cookie.txt', ignore_discard=True, ignore_expires=True)
#建立請求的request
req = urllib2.Request("http://www.baidu.com")
#利用urllib2的build_opener方法建立一個opener
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
response = opener.open(req)
print response.read()

這一篇又折騰折騰,結束了,可能看起來比較無聊,都是爲了接下來的各類實戰來作準備的,從下一篇開始,正式的進行網站的爬蟲了。ui

推薦閱讀:

【爬蟲系列之一】爬蟲開發環境的搭建
【爬蟲系列之二】python基礎知識的瞭解url

更多精彩內容,歡迎你們關注個人微信公衆號:喝醉的清茶

bVbb8HG?w=258&h=258

相關文章
相關標籤/搜索