溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python3如何使用Cookie模擬登陸

發(fā)布時(shí)間:2021-11-25 13:53:51 來(lái)源:億速云 閱讀:209 作者:小新 欄目:大數(shù)據(jù)

小編給大家分享一下Python3如何使用Cookie模擬登陸,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

運(yùn)行平臺(tái):Windows

Python版本:Python3.x

IDE:Sublime text3

一、為什么要使用Cookie

    Cookie,指某些網(wǎng)站為了辨別用戶身份、進(jìn)行session跟蹤而儲(chǔ)存在用戶本地終端上的數(shù)據(jù)(通常經(jīng)過(guò)加密)。
    比如說(shuō)有些網(wǎng)站需要登錄后才能訪問(wèn)某個(gè)頁(yè)面,在登錄之前,你想抓取某個(gè)頁(yè)面內(nèi)容,登陸前與登陸后是不同的,或者不允許的。
    使用Cookie和使用代理IP一樣,也需要?jiǎng)?chuàng)建一個(gè)自己的opener。在HTTP包中,提供了cookiejar模塊,用于提供對(duì)Cookie的支持。

Python3如何使用Cookie模擬登陸

    http.cookiejar功能強(qiáng)大,我們可以利用本模塊的CookieJar類的對(duì)象來(lái)捕獲cookie并在后續(xù)連接請(qǐng)求時(shí)重新發(fā)送,比如可以實(shí)現(xiàn)模擬登錄功能。該模塊主要的對(duì)象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。

    它們的關(guān)系: CookieJar–派生–>FileCookieJar–派生–>MozillaCookieJar和LWPCookieJar

    工作原理:創(chuàng)建一個(gè)帶有cookie的opener,在訪問(wèn)登錄的URL時(shí),將登錄后的cookie保存下來(lái),然后利用這個(gè)cookie來(lái)訪問(wèn)其他網(wǎng)址。查看登錄之后才能看到的信息。

    同樣,我們以實(shí)例進(jìn)行講解,爬取伯樂(lè)在線的面向?qū)ο蟮钠罬M的郵箱聯(lián)系方式。

二、實(shí)戰(zhàn)

1.背景介紹

    在伯樂(lè)在線有這么一個(gè)有趣的模塊,面向?qū)ο?,它說(shuō)白了就是提供了一個(gè)程序員(媛)網(wǎng)上相親的平臺(tái)。

    URL:http://date.jobbole.com/

    它的樣子是這樣的:

Python3如何使用Cookie模擬登陸

    可以看到,這里有很多的相親貼,隨便點(diǎn)進(jìn)去就會(huì)有網(wǎng)上相親MM的詳細(xì)信息,想獲取MM的聯(lián)系方式,需要積分,積分可以通過(guò)簽到的方式獲取。如果沒有登陸賬戶,獲取聯(lián)系方式的地方是這個(gè)樣子的:

Python3如何使用Cookie模擬登陸

    如果登陸了賬號(hào),獲取聯(lián)系方式的地方是這個(gè)樣子的:

Python3如何使用Cookie模擬登陸

    想要爬取MM的聯(lián)系郵箱,就需要用到我們本次講到的知識(shí),Cookie的使用。當(dāng)然,首先你積分也得夠。

    在講解之前,推薦一款抓包工具–Fiddler,可以在Google Chrome的Google商店下載這個(gè)插件,它的樣子是這樣的:

Python3如何使用Cookie模擬登陸

    可以看到,通過(guò)這個(gè)插件,我們可以很容易找到Post的Form Data等信息,很方便,當(dāng)然也可以用之前講得瀏覽器審查元素的方式查看這些信息。

2.過(guò)程分析

    在伯樂(lè)在線首頁(yè)點(diǎn)擊登陸的按鈕,F(xiàn)iddler的抓包內(nèi)容如下:

Python3如何使用Cookie模擬登陸

    從上圖可以看出,真正請(qǐng)求的url是

http://www.jobbole.com/wp-admin/admin-ajax.php

    Form Data的內(nèi)容記住,這些是我們編程需要用到的。user_login是用戶名,user_pass是用戶密碼。

    在點(diǎn)擊取得聯(lián)系郵箱按鈕的時(shí)候,F(xiàn)iddler的抓包內(nèi)容如下:

Python3如何使用Cookie模擬登陸

    從上圖可以看出,此刻真正請(qǐng)求的url是

http://date.jobbole.com/wp-admin/admin-ajax.php

    同樣Form Data中內(nèi)容要記下來(lái)。postId是每個(gè)帖子的id。例如,打開一個(gè)相親貼,它的URL是http://date.jobbole.com/4128/,那么它的這個(gè)postId就是4128。為了簡(jiǎn)化程序,這里就不講解如何自動(dòng)獲取這個(gè)postId了,本實(shí)例直接指定postId。如果想要自動(dòng)獲取,可以使用beautifulsoup解析http://date.jobbole.com/返回的信息。beautifulsoup的使用。有機(jī)會(huì)的話,會(huì)在后面的爬蟲筆記中進(jìn)行講解。

3.測(cè)試

    1)將Cookie保存到變量中

    首先,我們先利用CookieJar對(duì)象實(shí)現(xiàn)獲取cookie的功能,存儲(chǔ)到變量中,先來(lái)感受一下:

# -*- coding: UTF-8 -*-from urllib import requestfrom http import cookiejarif __name__ == '__main__':#聲明一個(gè)CookieJar對(duì)象實(shí)例來(lái)保存cookiecookie = cookiejar.CookieJar()#利用urllib.request庫(kù)的HTTPCookieProcessor對(duì)象來(lái)創(chuàng)建cookie處理器,也就CookieHandlerhandler=request.HTTPCookieProcessor(cookie)#通過(guò)CookieHandler創(chuàng)建openeropener = request.build_opener(handler)#此處的open方法打開網(wǎng)頁(yè)response = opener.open('http://www.baidu.com')#打印cookie信息for item in cookie:
        print('Name = %s' % item.name)
        print('Value = %s' % item.value)

    我們使用以上方法將cookie保存到變量中,然后打印出了cookie中的值,運(yùn)行結(jié)果如下:

Python3如何使用Cookie模擬登陸

    2)保存Cookie到文件

    在上面的方法中,我們將cookie保存到了cookie這個(gè)變量中,如果我們想將cookie保存到文件中該怎么做呢?方便以后直接讀取文件使用,這時(shí),我們就要用到FileCookieJar這個(gè)對(duì)象了,在這里我們使用它的子類MozillaCookieJar來(lái)實(shí)現(xiàn)Cookie的保存,編寫代碼如下:

# -*- coding: UTF-8 -*-from urllib import requestfrom http import cookiejarif __name__ == '__main__':#設(shè)置保存cookie的文件,同級(jí)目錄下的cookie.txtfilename = 'cookie.txt'#聲明一個(gè)MozillaCookieJar對(duì)象實(shí)例來(lái)保存cookie,之后寫入文件cookie = cookiejar.MozillaCookieJar(filename)#利用urllib.request庫(kù)的HTTPCookieProcessor對(duì)象來(lái)創(chuàng)建cookie處理器,也就CookieHandlerhandler=request.HTTPCookieProcessor(cookie)#通過(guò)CookieHandler創(chuàng)建openeropener = request.build_opener(handler)#此處的open方法打開網(wǎng)頁(yè)response = opener.open('http://www.baidu.com')#保存cookie到文件cookie.save(ignore_discard=True, ignore_expires=True)

    cookie.save的參數(shù)說(shuō)明:

  • ignore_discard的意思是即使cookies將被丟棄也將它保存下來(lái);

  • ignore_expires的意思是如果在該文件中cookies已經(jīng)存在,則覆蓋原文件寫入。

    在這里,我們將這兩個(gè)全部設(shè)置為True。

    運(yùn)行之后,cookies將被保存到cookie.txt文件中。我們可以查看自己查看下cookie.txt這個(gè)文件的內(nèi)容。

    3)從文件中獲取Cookie并訪問(wèn)

    我們已經(jīng)做到把Cookie保存到文件中了,如果以后想使用,可以利用下面的方法來(lái)讀取cookie并訪問(wèn)網(wǎng)站,感受一下:

# -*- coding: UTF-8 -*-from urllib import requestfrom http import cookiejarif __name__ == '__main__':#設(shè)置保存cookie的文件的文件名,相對(duì)路徑,也就是同級(jí)目錄下filename = 'cookie.txt'#創(chuàng)建MozillaCookieJar實(shí)例對(duì)象cookie = cookiejar.MozillaCookieJar()#從文件中讀取cookie內(nèi)容到變量cookie.load(filename, ignore_discard=True, ignore_expires=True)#利用urllib.request庫(kù)的HTTPCookieProcessor對(duì)象來(lái)創(chuàng)建cookie處理器,也就CookieHandlerhandler=request.HTTPCookieProcessor(cookie)#通過(guò)CookieHandler創(chuàng)建openeropener = request.build_opener(handler)#此用opener的open方法打開網(wǎng)頁(yè)response = opener.open('http://www.baidu.com')#打印信息print(response.read().decode('utf-8'))

    了解到以上內(nèi)容,我們那就可以開始正式編寫模擬登陸伯樂(lè)在線的程序了。同時(shí),我們也可以獲取相親MM的聯(lián)系方式。

4.編寫代碼

    我們利用CookieJar對(duì)象實(shí)現(xiàn)獲取cookie的功能,存儲(chǔ)到變量中。然后使用這個(gè)cookie變量創(chuàng)建opener,使用這個(gè)設(shè)置好cookie的opener即可模擬登陸,同筆記四中講到的IP代理的使用方法類似。

    創(chuàng)建cookie_test.py文件,編寫代碼如下:

# -*- coding: UTF-8 -*-from urllib import requestfrom urllib import errorfrom urllib import parsefrom http import cookiejarif __name__ == '__main__':#登陸地址login_url = 'http://www.jobbole.com/wp-admin/admin-ajax.php'    #User-Agent信息                   user_agent = r'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36'#Headers信息head = {
  
  
  'User-Agnet': user_agent, 'Connection': 'keep-alive'}#登陸Form_Data信息Login_Data = {}
    Login_Data['action'] = 'user_login'Login_Data['redirect_url'] = 'http://www.jobbole.com/'Login_Data['remember_me'] = '0'         #是否一個(gè)月內(nèi)自動(dòng)登陸Login_Data['user_login'] = '********'       #改成你自己的用戶名Login_Data['user_pass'] = '********'        #改成你自己的密碼#使用urlencode方法轉(zhuǎn)換標(biāo)準(zhǔn)格式logingpostdata = parse.urlencode(Login_Data).encode('utf-8')#聲明一個(gè)CookieJar對(duì)象實(shí)例來(lái)保存cookiecookie = cookiejar.CookieJar()#利用urllib.request庫(kù)的HTTPCookieProcessor對(duì)象來(lái)創(chuàng)建cookie處理器,也就CookieHandlercookie_support = request.HTTPCookieProcessor(cookie)#通過(guò)CookieHandler創(chuàng)建openeropener = request.build_opener(cookie_support)#創(chuàng)建Request對(duì)象req1 = request.Request(url=login_url, data=logingpostdata, headers=head)#面向?qū)ο蟮刂穌ate_url = 'http://date.jobbole.com/wp-admin/admin-ajax.php'#面向?qū)ο驞ate_Data = {}
    Date_Data['action'] = 'get_date_contact'Date_Data['postId'] = '4128'#使用urlencode方法轉(zhuǎn)換標(biāo)準(zhǔn)格式datepostdata = parse.urlencode(Date_Data).encode('utf-8')
    req2 = request.Request(url=date_url, data=datepostdata, headers=head)try:#使用自己創(chuàng)建的opener的open方法response1 = opener.open(req1)
        response2 = opener.open(req2)
        html = response2.read().decode('utf-8')
        index = html.find('jb_contact_email')#打印查詢結(jié)果print('聯(lián)系郵箱:%s' % html[index+19:-2])except error.URLError as e:if hasattr(e, 'code'):
            print("HTTPError:%d" % e.code)elif hasattr(e, 'reason'):
            print("URLError:%s" % e.reason)

5.運(yùn)行結(jié)果如下:

Python3如何使用Cookie模擬登陸

以上是“Python3如何使用Cookie模擬登陸”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI