關於scrapy使用cookie模擬登陸


Scrapy用Cookie實現模擬登錄

144 
作者 向右奔跑 
2016.05.29 20:17* 字數 1401 閱讀 3957評論 13

這是我學習Python爬蟲第30天的筆記。

模擬登錄是爬取某些站點內容的一個關鍵,有些網站(特別是論壇類),不登錄的話,一個數據也拿不到。

模擬登錄有這樣幾個關鍵:

  1. 弄清楚登錄的url
    一些網站打開出現登錄的頁面,地址欄大多數不是登錄提交表單的url。
  2. 提交登錄表單的字段
    登錄頁面的url和登錄表彰的字段名獲取的方式有兩種:
    1) 分析頁面源代碼,找到表單標簽及屬性。適應比較簡單的頁面,或者對網頁代碼,js非常熟悉。
    2) 采用抓包工具,查看提交的url和參數,如Chrome的開發者工具中的Network, Fiddler等。這種方式簡單粗暴、快速。尤其適應頁面比較復雜,登錄時經過了幾次跳轉的。

  3. 登錄以后去往頁面的url
    這個不是必須的,因為一般都有登錄后默認打開的頁面,或者你所需要取數據的頁面是明確的。但是如果對於第三方登錄來講,這個參數就是必要的。

知道了登錄url, 表單的參數后,通過提交參數的方式來實現登錄,不難。不是本文討論的重點。

params = {'uname':'kitty','upass':'hello'} r = requests.post("http://xxx.org/post", data=params)

一些站點的登錄流程還是比較復雜,如代碼封裝在js中,登錄時經過了跳轉。那采用以上的方式來實現登錄就比較復雜。即使用抓包拿到登錄url,表單參數,這時的登錄一般還附加了一些其他參數,需要一一構造出來,有的如時間戳等等。

有沒有一種比較簡單的方式,來成功實現爬蟲模擬登錄的,然后方便抓取到數據?Cookie就是這樣一種方式。不需要知道登錄url, 不需要知道登錄表單的字段名,以及還需要哪些其他參數。

我以QQ群論壇來說明使用Cookie實現模擬登錄,然后抓取數據。打開就是加載的登錄div。


你可以找一個登錄url和表單字段

以下兩種方式,都需要首先拿到Cookie,可以使用Chorme開發者工具,或者Fiddler,在目標網站上使用用戶名和密碼登錄一下,就拿到Cookie了。


找到Cookie

一、用requests發送請求,實現模擬登錄

使用requests發送請求時,把cookie作為參數傳遞進來就可以了。

構造Cookie:

cookie = {'Cookie': 'qm_username=137958873x0; qm_sid=8a4cce2f4413b4a5c9981093942b3f6f,qMUZrWmt0Z0XQbVZWKlNBZXUzT0xCSXJNRHNXU1NDVzd6MXZFQjJSbGZxMF8.; RK=/jt+Uh72a5; pgv_pvid=2786550760; pgv_info=ssid=s5861035317; ptui_loginuin=1379588730; ptisp=ctc; ptcz=e3d339f47c356076793ff4c270b572e35ed69746057039ee2e78677e391793b9; pt2gguin=o1379588730; uin=o1379588730; skey=@ssNmMQP3p; p_uin=o1379588730; p_skey=2w78648Kd9wuwxK9lsiDM02MQFJfSIhEuxhhE*aH-SU_; pt4_token=aGGiHcty94vO0iC8mxQ*OgkHOI6fZmdzQCxsb-baX1U_'}

發達請求時,傳遞Cookie

html = requests.get(url,cookies=cookie).content

詳細可參考,《用Python玩轉QQ群論壇》

二、用Scrapy實現模擬登錄

在Scrapy中Cookie登錄的步驟跟上面一樣,但是在實現過來中,卻遇到很多困難,一直困擾我,而且在Scrapy中提示不多,如請求被禁止:

getting Forbidden by robots.txt: scrapy

總結一下Scrapy中實現Cookie登錄的方法:
1)Cookie的寫法不一樣:


Cookie

注意,驗證登錄寫在start_requests()方法中,傳遞cookie參數。

return [FormRequest("http://qgc.qq.com/309o916014x/",cookies=cookies,callback=self.parse)]

2) 在settings.py中的配置,增加:

ROBOTSTXT_OBEY=False

再次啟動爬蟲,成功!還是同樣的頁面,抓取到數據。


論壇帖子更新情況

總結一下,使用Cookie登錄的好處:
不需要知道登錄url和表單字段以及其他參數,不需要了解登錄的過程和細節。由於不是采用登錄url, 用戶名+密碼的方式。配合工具使用,快速方便。

所謂用Cookie實現登錄,就把過登錄過的信息(包括用戶名、密碼以及其他的驗證信息)打包一起發給服務器,告訴服務器我是登錄驗證過的。

不足之處,Cookie有過期時間,過一段時間再運行這個爬蟲,需要重新獲取一下Cookie的值。抓取數據過程是沒有問題的。


關於Cookie的介紹:

    1. Cookie分類
      Cookie總是保存在用戶客戶端中,按在客戶端中的存儲位置,可分為內存Cookie和硬盤Cookie。Cookie的有效性,最短的瀏覽器關閉后就消失了,最長是可以一直保存,直到被刪除。

    2. Cookie用途
      因為HTTP協議是無狀態的,即服務器不知道用戶上一次做了什么,這嚴重阻礙了交互式Web應用程序的實現。
      在典型的應用是網上購物場景中,用戶瀏覽了幾個頁面,買了一盒餅干和兩飲料。最后結帳時,由於HTTP的無狀態性,不通過額外的手段,服務器並不知道用戶到底買了什么。
      所以Cookie就是用來繞開HTTP的無狀態性的“額外手段”之一。服務器可以設置或讀取Cookies中包含信息,借此維護用戶跟服務器中的狀態。

    3. Cookie的缺陷
      1)Cookie會被附加在每個HTTP請求中,所以無形中增加了流量。
      2) 由於在HTTP請求中的Cookie是明文傳遞的,所以安全性成問題。(除非用HTTPS)
      3) Cookie的大小限制在4KB左右。對於復雜的存儲需求來說是不夠用的。

原文鏈接:http://www.jianshu.com/p/887af1ab4200


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM