首頁  >  文章  >  後端開發  >  Python爬蟲利用cookie實現模擬登陸實例詳解

Python爬蟲利用cookie實現模擬登陸實例詳解

高洛峰
高洛峰原創
2017-01-18 16:15:311681瀏覽

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?)

Python爬蟲利用cookie實現模擬登陸實例詳解

之後才想起來是不是自自自如帶的就有,沒想到去lib文件夾一看還真有,白白浪費半個小時各種瞎折騰~~

下面我們就來介紹一下這個模組,該模組主要的對像有CookieJar、FileCookieJar、MozillaCookieJar、 LWPCookieJar。

它們的關係:CookieJar —-衍生—->FileCookieJar —-衍生—–>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)

將上面的例子簡單變形就可以得到本例,使用了CookieJarokiJar,為什麼呢?我們將MozillaCookiJar換成CookieJar試試,下面一張圖你就能明白:

Python爬蟲利用cookie實現模擬登陸實例詳解

  CookieJar是沒有保存save屬性的~

  save()這個方法中:ignore_discard的意思是丟棄即使cookies將被丟棄也將它保存下來,ignore_expires的意思是如果在該檔案中cookies已經存在,則覆蓋原始檔案寫入,在這裡,我們將這兩個全部設定為True。運行之後,cookies將保存到cookie.txt檔案中,我們查看一下內容:

Python爬蟲利用cookie實現模擬登陸實例詳解

這樣我們就成功保存了我們想要的cookie

3、從檔案中獲取cookie並存取

<pre style="background-color: rgb(255, 255, 255); font-family: 宋体; font-size: 9pt;"><pre name="code" class="python">#coding=utf-8
import urllib2
import cookielib
import urllib
  
#第一步先给出账户密码网址准备模拟登录
postdata = urllib.urlencode({
  &#39;stuid&#39;: &#39;1605122162&#39;,
  &#39;pwd&#39;: &#39;xxxxxxxxx&#39;#密码这里就不泄漏啦,嘿嘿嘿
})
loginUrl = &#39;http://ids.xidian.edu.cn/authserver/login?service=http%3A%2F%2Fjwxt.xidian.edu.cn%2Fcaslogin.jsp&#39;# 登录教务系统的URL,成绩查询网址
  
# 第二步模拟登陆并保存登录的cookie
filename = &#39;cookie.txt&#39;  #创建文本保存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 = &#39;http://ids.xidian.edu.cn/authserver/login?service&#39;  #只要是帐号密码一样的网址就可以, 请求访问成绩查询网址
result = opener.open(gradeUrl)
print result.read()





创建一个带有cookie的opener,在访问登录的URL时,将登录后的cookie保存下来,然后利用这个cookie来访问其他网址。


核心思想:创建opener,包含了cookie的内容。之后在利用opener时,就会自动使用原先保存的cookie.

    

   

感謝閱讀,希望能幫助大家,謝謝大家對本站的支持!

更多Python爬蟲利用cookie實現模擬登陸實例詳解相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn