python爬蟲模擬登入在基礎教育中的應用_Python爬蟲利用cookie實現模擬登陸例項詳解...
Cookie,指某些網站為了辨別使用者身份、進行session跟蹤而儲存在使用者本地終端上的資料(通常經過加密)。
舉個例子,某些網站是需要登入後才能得到你想要的資訊的,不登陸只能是遊客模式,那麼我們可以利用Urllib2庫儲存我們以前登入過的Cookie,之後載入cookie獲取我們想要的頁面,然後再進行抓取。理解cookie主要是為我們快捷模擬登入抓取目標網頁做出準備。
我之前的帖子中使用過urlopen()這個函式來開啟網頁進行抓取,這僅僅只是一個簡單的Python網頁開啟器,其引數也僅有urlopen(url,data,timeout),這三個引數對於我們獲取目標網頁的cookie是遠遠不夠的。這時候我們就要利用到另外一種Opener――CookieJar。
cookielib也是Python進行爬蟲的一個重要模組,他能與urllib2相互結合一起爬取想要的內容。該模組的CookieJar類的物件可以捕獲cookie並在後續連線請求時重新發送,這樣就可以實現我們所需要的模擬登入功能。
這裡特別說明一下,cookielib是在py2.7中自帶的模組,無需重新安裝,想要檢視其自帶模組可以檢視Python目錄下的Lib資料夾,裡面有所有安裝的模組。我一開始沒想起來,在pycharm中竟然沒有搜到cookielib,使用了快捷安裝也報錯:Couldn't find index page for 'Cookielib' (maybe misspelled?)
之後才想起來是不是自帶的就有,沒想到去lib資料夾一看還真有,白白浪費半個小時各種瞎折騰~~
下面我們就來介紹一下這個模組,該模組主要的物件有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。
它們的關係:CookieJar ―-派生―->FileCookieJar ―-派生―C>MozillaCookieJar和LWPCookieJar 主要用法,我們下面也會講到。urllib2.urlopen()函式不支援驗證、cookie或者其它HTTP高階功能。要支援這些功能,必須使用build_opener()(可以用於讓python程式模擬瀏覽器進行訪問,作用你懂得~)函式建立自定義Opener物件。
1、首先我們就來獲取一下網站的cookie
例子:
#coding=utf-8
import cookielib
import urllib2
mycookie = cookielib.CookieJar() #宣告一個CookieJar的類物件儲存cookie(注意CookieJar的大小寫問題)
handler = urllib2.HTTPCookieProcessor(mycookie) #利用urllib2庫中的HTTPCookieProcessor來宣告一個處理cookie的處理器
opener = urllib2.build_opener(handler) #利用handler來構造opener,opener的用法和urlopen()類似
response = opener.open("http://www.baidu.com") #opener返回的一個應答物件response
for item in my.cookie:
print"name="+item.name
print"value="+item.value
結果:
name=BAIDUID
value=73BD718962A6EA0DAD4CB9578A08FDD0:FG=1
name=BIDUPSID
value=73BD718962A6EA0DAD4CB9578A08FDD0
name=H_PS_PSSID
value=1450_19035_21122_17001_21454_21409_21394_21377_21526_21189_21398
name=PSTM
value=1478834132
name=BDSVRTM
value=0
name=BD_HOME
value=0
這樣我們就得到了一個最簡單的cookie。
2、將cookie儲存到檔案
上面我們得到了cookie,下面我們學習如何儲存cookie。在這裡我們使用它的子類MozillaCookieJar來實現Cookie的儲存
例子:
#coding=utf-8
import cookielib
import urllib2
mycookie = cookielib.MozillaCookieJar() #宣告一個MozillaCookieJar的類物件儲存cookie(注意MozillaCookieJar的大小寫問題)
handler = urllib2.HTTPCookieProcessor(mycookie) #利用urllib2庫中的HTTPCookieProcessor來宣告一個處理cookie的處理器
opener = urllib2.build_opener(handler) #利用handler來構造opener,opener的用法和urlopen()類似
response = opener.open("http://www.baidu.com") #opener返回的一個應答物件response
for item in mycookie:
print"name="+item.name
print"value="+item.value
filename='mycookie.txt'#設定儲存的檔名
mycookie.save(filename,ignore_discard=True,ignore_expires=True)
將上面的例子簡單變形就可以得到本例,使用了CookieJar的子類MozillaCookiJar,為什麼呢?我們將MozillaCookiJar換成CookieJar試試,下面一張圖你就能明白:
CookieJar是沒有儲存save屬性的~
save()這個方法中:ignore_discard的意思是即使cookies將被丟棄也將它儲存下來,ignore_expires的意思是如果在該檔案中cookies已經存在,則覆蓋原檔案寫入,在這裡,我們將這兩個全部設定為True。執行之後,cookies將被儲存到cookie.txt檔案中,我們檢視一下內容:
這樣我們就成功儲存了我們想要的cookie
3、從檔案中獲取cookie並訪問
#coding=utf-8
import urllib2
import cookielib
import urllib
#第一步先給出賬戶密碼網址準備模擬登入
postdata = urllib.urlencode({
'stuid': '1605122162','pwd': 'xxxxxxxxx'#密碼這裡就不洩漏啦,嘿嘿嘿
})
loginUrl = 'http://ids.xidian.edu.cn/authserver/login?service=http%3A%2F%2Fjwxt.xidian.edu.cn%2Fcaslogin.jsp'# 登入教務系統的URL,成績查詢網址
# 第二步模擬登陸並儲存登入的cookie
filename = 'cookie.txt' #建立文字儲存cookie
mycookie = cookielib.MozillaCookieJar(filename) # 宣告一個MozillaCookieJar物件例項來儲存cookie,之後寫入檔案
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(mycookie)) #定義這個opener,物件是cookie
result = opener.open(loginUrl,postdata)
mycookie.save(ignore_discard=True,ignore_expires=True)# 儲存cookie到cookie.txt中
# 第三步利用cookie請求訪問另一個網址,教務系統總址
gradeUrl = 'http://ids.xidian.edu.cn/authserver/login?service' #只要是帳號密碼一樣的網址就可以, 請求訪問成績查詢網址
result = opener.open(gradeUrl)
print result.read()
建立一個帶有cookie的opener,在訪問登入的URL時,將登入後的cookie儲存下來,然後利用這個cookie來訪問其他網址。
核心思想:建立opener,包含了cookie的內容。之後在利用opener時,就會自動使用原先儲存的cookie.
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支援!
總結
如果覺得程式設計之家網站內容還不錯,歡迎將程式設計之家網站推薦給程式設計師好友。
本圖文內容來源於網友網路收集整理提供,作為學習參考使用,版權屬於原作者。
如您喜歡交流學習經驗,點選連結加入交流1群:1065694478(已滿)交流2群:163560250