python-40: 哪一個cookies纔是咱們須要的

咱們已經獲取了cookies,原本按照劇情發展,咱們下一步應該是使用這個cookies模擬登陸了,可是恰恰我是一個比較欠的人,我想要弄清楚咱們前面三種方法獲取到的cookies是否是同樣的,哦,不。其實應該是四種方法,那麼咱們如今就來看看這四個cookies有什麼區別吧

1. 從本地文件獲取的cookies
    咱們前面說過,咱們找到的存放cookies的文件是一個叫 cookies.sqlite 的文件,這是一個數據庫文件,我使用的linux系統要查看這個文件還須要安裝別的程序,可是我想,既然這個是瀏覽器生成的文件,那麼爲了安全起見,它很 可能會對數據進行各類處理,等到調用的時候,再按照本身的規則來進行解碼,若是是這樣的話,我以爲咱們沒有必要去深刻的研究這個文件,並且它相對於其餘兩 種方法來講也不是那麼好用,因此對這種狀況不予討論
    
2. 使用瀏覽器的調試工具
    這裏其實能夠獲取到的有兩個cookies,這也就是我前面爲何說一共有4個cookies的緣由
    我使用的是火狐瀏覽器,在爬蟲的學習或者linux系統中,我以爲這款瀏覽器相對好用一些,其餘的瀏覽器或許也有這樣的功能可是我不是很熟悉,因此這裏 就以火狐瀏覽器來講明,爲了便於對比,我這裏用百度首頁做爲例子,好了,首先登陸百度首頁,而後按F12調出控制檯,你會看到這樣的界面
python

     咱們發現這裏的cookies有不少的名稱和內容,咱們暫且不考慮這裏的cookies是否所有都要使用到,咱們先來看看另外一種獲取cookies的方法,就在Cookies左邊的網絡選項卡里面
linux

 我 們能夠看到這裏有個響應頭信息,也有請求頭信息,咱們前面在討論瀏覽網頁的流程這個問題時提到,客戶端向服務器端發送請求,而後服務器端響應請求併發回數據,咱們在網絡選項卡這裏看到有不少的 GET+xxxxxxxx之類的東西,可見,在咱們打開一個網站的時候,全部的網頁內容並非一會兒所有顯示出來的, 而是一部分一部份內容的請求響應而後發送接收數據,而後再把整個網頁慢慢的顯示出來。在請求頭信息這裏咱們也看到有一個cookies,那麼這跟前面的cookies是否是同樣的呢?
我對比了不少網站,發現有的是同樣的有的是不同的,若是感興趣的話能夠本身去嘗試一下sql

3. 經過代碼獲取的cookies
數據庫

咱們運行上一節獲取cookies的代碼試試看有什麼效果瀏覽器

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = '217小月月坑'

'''
 獲取coolies
'''

import urllib2
import cookielib
#聲明一個CookieJar對象實例來保存cookie
cookie = cookielib.CookieJar()
#利用urllib2庫的HTTPCookieProcessor對象來建立cookie處理器
handler=urllib2.HTTPCookieProcessor(cookie)
#經過handler來構建opener
opener = urllib2.build_opener(handler)
#此處的open方法同urllib2的urlopen方法,也能夠傳入request
response = opener.open('http://www.baidu.com')
for item in cookie:
    print item.name+'='+item.value

咱們看看程序運行的結果安全


這個得出來的cookies值又更少了服務器

那麼,除去咱們不討論的第一種狀況以外,一共還有三個cookies,那咱們須要使用的是哪一個呢,首先說使用代碼獲取的cookies,咱們編寫爬蟲確定是但願網站作得越簡單越好,可是做爲網站的管理者來講他們並不但願這樣,惡意的訪問網站可能會形成服務器的卡頓甚至崩潰,或者是用戶的隱私數據被竊取,因此網站的機制也在不斷變化進步,而咱們使用源碼獲取cookies就會受到這些限制,我在使用一樣的代碼獲取360doc網上圖書館的cookies的時候,就看到了urllib2.HTTPError: HTTP Error 403: Forbidden 這樣的提示,因此說使用源碼獲取的cookies是有必定的條件的cookie

那就只剩下兩個了,我沒法解釋爲何瀏覽器能夠看到兩個cookies,因此我一個一個的去試驗了,結果發現,使用網絡選項卡請求頭信息裏面的cookies能夠訪問網站而另外一個則不能,其中或許涉及到瀏覽器的設計我如今還不能理解,只能使用一個比較笨的方法,若是後面有時間,我會將這個內容補上
網絡

相關文章
相關標籤/搜索