1. 程式人生 > >爬蟲cookies詳解

爬蟲cookies詳解

二級 一個點 數據庫 客戶端和服務器 domain 默認 其他 瀏覽器緩存 比對

cookies簡介

cookie是什麽?

Cookie,有時也用其復數形式 Cookies,指某些網站為了辨別用戶身份、進行 session 跟蹤而儲存在用戶本地終端上的數據(通常經過加密)。定義於 RFC2109 和 2965 中的都已廢棄,最新取代的規範是 RFC6265[1]。Cookie其實就是瀏覽器緩存。

cookie的生命周期

  1. 會話cookie:沒有設置expires(是個時間戳)的,瀏覽器(session)關閉後,就自動失效
  2. 持久cookie:設置了expires的,根據設置的失效時間決定(expires時間是可以進行修改的, 但是很多網站會做防止修改的設置)

cookie具有的屬性

  • name:為一個cookie的名稱。
  • value:為一個cookie的值。
  • domain:為可以訪問此cookie的域名,譬如www.baidu.com:baidu.com就是頂級域名

域名的劃分:http://aaa.bbb.secode.first.com,每一個點劃分為一個域名,域名從後向前一次為頂級、一級、二級等。

  1. 非頂級域名,如二級域名或者三級域名,設置的cookie的domain只能為頂級域名或者二級域名或者三級域名本身,不能設置其他二級域名的cookie,否則cookie無法生成。
  2. 頂級域名只能設置domain為頂級域名,不能設置為二級域名或者三級域名,否則cookie無法生成。
  3. 二級域名能讀取設置了domain為頂級域名或者自身的cookie,不能讀取其他二級域名domain的cookie。所以要想cookie在多個二級域名中共享,需要設置domain為頂級域名,這樣就可以在所有二級域名裏面或者到這個cookie的值了。
  4. 頂級域名只能獲取到domain設置為頂級域名的cookie,其他domain設置為二級域名的無法獲取。

總結一下:域名具有繼承性,只能使用其自身或其父輩的域名,不能使用其子域名或者兄弟域名。例如:
a.b.c.d.com
a.b.x.d.com
c可以使用domain為d.com或者c.d.com的域名cookie,不能使用x.d.com的域名或者b.c.d.com,這裏大家做好了解就行了,碰到這種情況知道有這麽個情況就行,一般我們需要關註的很少。

  • path:為可以訪問此cookie的頁面路徑。 比如www.jianshu.com/u/680e0e38ddc9,path就是/u/680e0e38ddc9,那麽只有/u/680e0e38ddc9路徑下的頁面可以讀取此cookie。
  • expires/Max-Age :為此cookie超時時間。若設置其值為一個時間(一個時間戳),那麽當到達此時間後,此cookie失效。
    不設置的話默認值是Session,意思是cookie會和session一起失效。
    當瀏覽器關閉(不是瀏覽器標簽頁,而是整個瀏覽器) 後,此cookie失效。
  • Size: 此cookie大小。
  • http: cookie的httponly屬性。若此屬性為true,則只有在http請求頭中會帶有此cookie的信息,
    而不能通過document.cookie來訪問此cookie。
  • secure : boolean型,默認為false,設置是否只能通過https來傳遞此cookie

我們做爬蟲重點關註name和value。

cookie應用

  1. 以任何方式,如瀏覽器、selenium、封包方式等,獲得對應的cookies
  2. 將cookies保存,可以是在內存、文件、數據庫等
  3. 在你想要應用已有的cookie的 項目 中,已各種方式:文件、數據庫、網絡等,獲取到對應的cookie,然後進行設置,接著就可以訪問對應的資源了

實際應用:

  1. 有幾臺專門的服務器,進行登錄操作,所有賬號保存在數據庫,由這些專門登錄的服務器進行登錄操作,登錄成功後,保存cookies到數據庫
  2. 有專門的應用服務器,從數據庫讀取cookies,進行相應的業務操作,這種服務器不處理登錄操作

PS:

  1. cookie的應用,必須是服務器支持不同的session可以使用同一個cookie
  2. expires是一個客戶端和服務器的君子約定,瀏覽器檢測到失效了,就不會讀取這個cookie,大部分網站都不會檢測這個cookie失效,部分要求嚴格的網站是會檢測的,和服務器時間進行比對,判斷是否失效。
  3. cookie都是由服務器設置的,你客戶端設置沒意義,服務器不會進行驗證,通過response的headers中set-cookie設置

留在最後的話:並不是所有網站都適合保存cookies進行登錄,怎麽檢查哪些網站可以使用保存cookies進行登錄呢?我們可以在瀏覽器中進行登錄操作,登錄成功後,關閉瀏覽器,然後重新打開瀏覽器以後訪問此網站,看看是否處於登錄狀態,如果是登錄狀態,那麽這個網站很大程度上是可以使用cookies進行訪問操作的。


如果你覺得我的文章還可以,可以關註我的微信公眾號,查看更多實戰文章:Python爬蟲實戰之路
也可以掃描下面二維碼,添加我的微信公眾號

技術分享圖片

技術分享圖片

爬蟲cookies詳解