python 網頁cookie的使用
網頁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()
python 網頁cookie的使用