出現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
cookie,通常是某些網站爲了辨別用戶身份,進行session跟蹤,從而存儲在客戶端的數據。好比某些網站須要登陸,才能訪問某些頁面。這裏咱們可使用urllib2庫保存咱們登陸的cookie,而後再進行抓取內容。服務器
當你獲取一個URL你使用一個opener(一個urllib2.OpenerDirector的實例)。在前面,咱們都是使用的默認的opener,也就是urlopen,它是一個特殊的opener,能夠理解成opener的一個特殊實例,傳入的參數僅僅是url,data,timeout。微信
若是咱們須要用到Cookie,只用這個opener是不能達到目的的,因此咱們須要建立更通常的opener來實現對Cookie的設置。cookie
cookielib模塊的主要做用是提供可存儲cookie的對象,以便於與urllib2模塊配合使用來訪問Internet資源。 Cookielib模塊很是強大,咱們能夠利用本模塊的CookieJar類的對象來捕獲cookie並在後續鏈接請求時從新發送,好比能夠實現模擬登陸 功能。該模塊主要的對象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。網絡
它們的關係:CookieJar —-派生—->FileCookieJar —-派生—–>MozillaCookieJar和LWPCookieJarsession
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
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已經存在,則覆蓋原文件寫入網站
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
更多精彩內容,歡迎你們關注個人微信公衆號:喝醉的清茶