python 網頁cookie的使用

xie仗劍天涯發表於2017-05-16

網頁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()

 

 

 

 

相關文章