python網絡數據採集-處理登錄和cookie

第一部分:基礎概念

      到次爲止,我們介紹過大部分表單都允許你想網站提交信息,或者讓你在提交表單後立即看到想要的頁面信息,那麼,這些表單和登錄表單(當你瀏覽網站時讓你保持“已登錄”狀態)有什麼不同?

      大多數新式的網站都用cookie跟蹤用戶是否已登錄的狀態信息。一旦網站驗證了你的登錄權證,它就會將它們保存在你的瀏覽器的cookie中,裏面通常包含一些服務器生成的令牌、登錄有效時限和狀態跟蹤信息。網站會把這個cookie當做信息驗證的證據,在你瀏覽網站的每個頁面時出示給服務器。在20世紀90年代中期廣泛使用cookie之前,保證用戶安全驗證並跟蹤用戶是網站上的一大問題。

     雖然cookie爲網絡開發者解決了大問題,但同時卻爲網絡爬蟲帶來了重大問題。你可以一整天只提交一次登錄表單,但是如果你沒有一直關注表單傳回給你的那個cookie,那麼一段時間以後再次訪問新頁面時,你的登錄狀態就會丟失,需要重新登錄。

第二部分:實戰

 2.1 登錄測試:

        在http://pythonscraping.com/pages/cookies/login.html有一個簡單的登錄表單(用戶名可以是任意值,但是密碼必須是“password”) 。這個表單在 http://pythonscraping.com/pages/cookies/welcome.php處理,裏面包含一個簡介頁面http://pythonscraping.com/pages/cookies/profile.php。

      如果你在登錄會籤想要進入歡迎界面或簡介界面,會看到一個錯誤信息和訪問前請先登錄的指令。在界面頁面中,網站會檢測瀏覽器的cookie,看它有沒有頁面已經登錄的設置信息:

用Requests庫跟蹤cookie同樣很簡單:

import requests
params={'username':'Peter','password':'password'}
r=requests.post("http://pythonscraping.com/pages/cookies/welcome.php",params)
print("Cookie is set to:")
print(r.cookies.get_dict())
print("....a......")
print("Going to profile page ...")
r=requests.get("http://pythonscraping.com/pages/cookies/profile.php",cookies=r.cookies)
print(r.text)
     這裏我們向歡迎頁面發送了一個登錄參數,它的作用就像登錄表單的處理器,然後我從請求結果中獲取cookie,打印登錄狀態的驗證結果,然後在通過cookies參數把cookie發送到簡介頁面,程序執行結果如下:


與瀏覽器執行結果一致。

2.2   複雜網站處理方式

     對於簡單的網站,一般上面的方法就可以使用了,但是如果你面對的是一個比較複雜的網站,它經常暗自調整cookie,或者如果你從一開始就完全不想要用cookie,該怎麼處理呢?Requests庫的session函數可以完美地解決這些問題:

import requests
session=requests.Session()
params={'username':'Peter','password':'password'}
s=session.post('http://pythonscraping.com/pages/cookies/welcome.php',params)
print("Cookie is set to:")
print(s.cookies.get_dict())
print("..........")
print("Going to porfile page...")
s=session.get("http://pythonscraping.com/pages/cookies/profile.php")
print(s.text)
執行結果如下圖,與上面的結果一致:

     在這個例子中,session(會話)對象(調用requests.session()獲取)會持續跟蹤會話信息,像cookie、header,甚至包括運行HTTP協議的信息,比如HTTPAdapter(爲HTTP和HTTPS的鏈接會話提供統一的接口)。

第三部分:小結

     Requests庫是一個非常給力的庫,程序員完全不用費腦子,也不用寫代碼,可能只遜色與Selenium.雖然寫網絡爬蟲的時候,你可能想放手讓Requests庫替自己做事情,但是持續關注cookie的狀態,掌握它們可以控制的範圍是非常重要的,這樣可以避免痛苦地調試和追尋網站異常行爲,節省很多時間。

發佈了105 篇原創文章 · 獲贊 238 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章