網頁cookie的使用
Cookie,指某些網站為了辨別使用者身份、進行session跟蹤而儲存在使用者本地終端上的資料(通常經過加密)
# opener的概念
當你獲取一個URL你使用一個opener(一個urllib2.OpenerDirector的例項)。在前面,我們都是使用的預設的opener,也就是urlopen。它是一個特殊的opener,可以理解成opener的一個特殊例項,傳入的引數僅僅是url,data,timeout。
如果我們需要用到Cookie,只用這個opener是不能達到目的的,所以我們需要建立更一般的opener來實現對Cookie的設定
# Cookielib
cookielib模組的主要作用是提供可儲存cookie的物件,以便於與urllib2模組配合使用來訪問Internet資源。Cookielib模組非常強大,我們可以利用本模組的CookieJar類的物件來捕獲cookie並在後續連線請求時重新傳送,比如可以實現模擬登入功能。該模組主要的物件有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。
關係:CookieJar —- 派生—->FileCookieJar —- 派生 —–> MozillaCookieJar和LWPCookieJar
1. 獲取Cookie儲存到變數
利用CookieJar物件實現獲取cookie的功能,儲存到變數中
# 例子
import urllib2 import cookielib cookie = cookielib.CookieJar() handler = urllib2.HTTPCookieProcessor(cookie) opener = urllib2.build_opener(handler) response = opener.open("http://www.baidu.com") for item in cookie: print ("Name=" + item.name) print ("Value=" + item.value)
2. 儲存Cookie到txt檔案
將cookie儲存到了cookie這個變數中,使用FileCookieJar的子類MozillaCookieJar來實現Cookie的儲存
import urllib2 import cookielib filename = "cookie.txt" # 設定儲存cookie的檔案 cookie = cookielib.MozillaCookieJar(filename) # 宣告一個MozillaCookieJar物件例項來儲存cookie handler = urllib2.HTTPCookieProcessor(cookie) # 利用urllib2庫的HTTPCookieProcessor物件來建立cookie處理器 opener = urllib2.build_opener(handler) # 通過handler來構建opener response = opener.open("http://www.baidu.com") # 建立一個請求,原理同urllib2的urlopen cookie.save(ignore_discard=True,ignore_expires=True) # 儲存cookie到檔案
注:ignore_discard的意思是即使cookies將被丟棄也將它儲存下來,ignore_expires的意思是如果在該檔案中cookies已經存在,則覆蓋原檔案寫入
3. 從檔案中獲取Cookie並訪問
import urllib2 import cookielib cookie = cookielib.MozillaCookieJar() cookie.load("cookie.txt",ignore_discard=True,ignore_expires=True) request = urllib2.Request("http://www.baidu.com") opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) response = opener.open(request) print (response.read())
4. 利用cookie模擬網站登入163郵箱
利用cookie實現模擬登入,並將cookie資訊儲存到文字檔案中。
# eg_v1 import urllib import urllib2 import cookielib filename = "163mail.txt" cookie = cookielib.MozillaCookieJar(filename) opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) postdata = urllib.urlencode({"email":"15800220134","password":"abc123456"}) loginURL = "http://mail.163.com/" result = opener.open(loginURL,postdata) cookie.save(ignore_discard=True,ignore_expires=True) gradeURL = "http://mail.163.com/js6/main.jsp?sid=VDTWzvRRwIKUKIMaBmRRejDfKwRnmmNM&df=mail163_letter#module=welcome.WelcomeModule%7C%7B%7D" result1 = opener.open(gradeURL) print (result1.read()) # eg_v2 import urllib import urllib2 def post(url,data): request = urllib2.Request(url) data = urllib.urlencode(data) opener = urllib2.build_opener(urllib2.HTTPCookieProcessor()) response = opener.open(request,data) return response.read() def main(): posturl = "http://mail.163.com" data = {"email":"15800220134","password":"abc123456"} print (post(posturl,data)) if __name__ == "__main__": main()