Scrapy用Cookie實(shí)現(xiàn)模擬登錄

這是我學(xué)習(xí)Python爬蟲第30天的筆記院喜。

模擬登錄是爬取某些站點(diǎn)內(nèi)容的一個關(guān)鍵亡蓉,有些網(wǎng)站(特別是論壇類),不登錄的話喷舀,一個數(shù)據(jù)也拿不到砍濒。

模擬登錄有這樣幾個關(guān)鍵:

  1. 弄清楚登錄的url
    一些網(wǎng)站打開出現(xiàn)登錄的頁面淋肾,地址欄大多數(shù)不是登錄提交表單的url。
  2. 提交登錄表單的字段
    登錄頁面的url和登錄表彰的字段名獲取的方式有兩種:
  1. 分析頁面源代碼梯影,找到表單標(biāo)簽及屬性巫员。適應(yīng)比較簡單的頁面,或者對網(wǎng)頁代碼甲棍,js非常熟悉。
  2. 采用抓包工具赶掖,查看提交的url和參數(shù)感猛,如Chrome的開發(fā)者工具中的Network, Fiddler等奢赂。這種方式簡單粗暴陪白、快速。尤其適應(yīng)頁面比較復(fù)雜膳灶,登錄時經(jīng)過了幾次跳轉(zhuǎn)的咱士。
  1. 登錄以后去往頁面的url
    這個不是必須的,因?yàn)橐话愣加械卿浐竽J(rèn)打開的頁面轧钓,或者你所需要取數(shù)據(jù)的頁面是明確的序厉。但是如果對于第三方登錄來講,這個參數(shù)就是必要的毕箍。

知道了登錄url, 表單的參數(shù)后弛房,通過提交參數(shù)的方式來實(shí)現(xiàn)登錄,不難而柑。不是本文討論的重點(diǎn)文捶。

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

一些站點(diǎn)的登錄流程還是比較復(fù)雜,如代碼封裝在js中媒咳,登錄時經(jīng)過了跳轉(zhuǎn)粹排。那采用以上的方式來實(shí)現(xiàn)登錄就比較復(fù)雜。即使用抓包拿到登錄url涩澡,表單參數(shù)顽耳,這時的登錄一般還附加了一些其他參數(shù),需要一一構(gòu)造出來筏养,有的如時間戳等等斧抱。

有沒有一種比較簡單的方式,來成功實(shí)現(xiàn)爬蟲模擬登錄的渐溶,然后方便抓取到數(shù)據(jù)辉浦?Cookie就是這樣一種方式。不需要知道登錄url, 不需要知道登錄表單的字段名茎辐,以及還需要哪些其他參數(shù)宪郊。

我以QQ群論壇來說明使用Cookie實(shí)現(xiàn)模擬登錄掂恕,然后抓取數(shù)據(jù)。打開就是加載的登錄div弛槐。

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

以下兩種方式懊亡,都需要首先拿到Cookie,可以使用Chorme開發(fā)者工具乎串,或者Fiddler店枣,在目標(biāo)網(wǎng)站上使用用戶名和密碼登錄一下,就拿到Cookie了叹誉。

找到Cookie

一鸯两、用requests發(fā)送請求,實(shí)現(xiàn)模擬登錄

使用requests發(fā)送請求時长豁,把cookie作為參數(shù)傳遞進(jìn)來就可以了钧唐。

構(gòu)造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_'}

發(fā)達(dá)請求時,傳遞Cookie

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

詳細(xì)可參考匠襟,《用Python玩轉(zhuǎn)QQ群論壇》

二钝侠、用Scrapy實(shí)現(xiàn)模擬登錄

在Scrapy中Cookie登錄的步驟跟上面一樣,但是在實(shí)現(xiàn)過來中酸舍,卻遇到很多困難帅韧,一直困擾我,而且在Scrapy中提示不多父腕,如請求被禁止:

getting Forbidden by robots.txt: scrapy

總結(jié)一下Scrapy中實(shí)現(xiàn)Cookie登錄的方法:
1)Cookie的寫法不一樣:


Cookie

注意弱匪,驗(yàn)證登錄寫在start_requests()方法中,傳遞cookie參數(shù)璧亮。

return [FormRequest("http://qgc.qq.com/309o916014x/",cookies=cookies,callback=self.parse)]
  1. 在settings.py中的配置萧诫,增加:
ROBOTSTXT_OBEY=False

再次啟動爬蟲,成功枝嘶!還是同樣的頁面帘饶,抓取到數(shù)據(jù)。

論壇帖子更新情況

總結(jié)一下群扶,使用Cookie登錄的好處:
不需要知道登錄url和表單字段以及其他參數(shù)及刻,不需要了解登錄的過程和細(xì)節(jié)。由于不是采用登錄url, 用戶名+密碼的方式竞阐。配合工具使用缴饭,快速方便。

所謂用Cookie實(shí)現(xiàn)登錄骆莹,就把過登錄過的信息(包括用戶名颗搂、密碼以及其他的驗(yàn)證信息)打包一起發(fā)給服務(wù)器,告訴服務(wù)器我是登錄驗(yàn)證過的幕垦。

不足之處丢氢,Cookie有過期時間傅联,過一段時間再運(yùn)行這個爬蟲,需要重新獲取一下Cookie的值疚察。抓取數(shù)據(jù)過程是沒有問題的蒸走。


關(guān)于Cookie的介紹:

  1. Cookie分類
    Cookie總是保存在用戶客戶端中,按在客戶端中的存儲位置貌嫡,可分為內(nèi)存Cookie和硬盤Cookie比驻。Cookie的有效性,最短的瀏覽器關(guān)閉后就消失了衅枫,最長是可以一直保存嫁艇,直到被刪除。

  2. Cookie用途
    因?yàn)镠TTP協(xié)議是無狀態(tài)的弦撩,即服務(wù)器不知道用戶上一次做了什么,這嚴(yán)重阻礙了交互式Web應(yīng)用程序的實(shí)現(xiàn)论皆。
    在典型的應(yīng)用是網(wǎng)上購物場景中益楼,用戶瀏覽了幾個頁面,買了一盒餅干和兩飲料点晴。最后結(jié)帳時感凤,由于HTTP的無狀態(tài)性,不通過額外的手段粒督,服務(wù)器并不知道用戶到底買了什么陪竿。
    所以Cookie就是用來繞開HTTP的無狀態(tài)性的“額外手段”之一。服務(wù)器可以設(shè)置或讀取Cookies中包含信息屠橄,借此維護(hù)用戶跟服務(wù)器中的狀態(tài)族跛。

  3. Cookie的缺陷
    1)Cookie會被附加在每個HTTP請求中,所以無形中增加了流量锐墙。

  1. 由于在HTTP請求中的Cookie是明文傳遞的礁哄,所以安全性成問題。(除非用HTTPS)
  2. Cookie的大小限制在4KB左右溪北。對于復(fù)雜的存儲需求來說是不夠用的桐绒。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市之拨,隨后出現(xiàn)的幾起案子茉继,更是在濱河造成了極大的恐慌,老刑警劉巖蚀乔,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烁竭,死亡現(xiàn)場離奇詭異,居然都是意外死亡乙墙,警方通過查閱死者的電腦和手機(jī)颖变,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門生均,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人腥刹,你說我怎么就攤上這事马胧。” “怎么了衔峰?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵佩脊,是天一觀的道長。 經(jīng)常有香客問我垫卤,道長威彰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任穴肘,我火速辦了婚禮歇盼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘评抚。我一直安慰自己豹缀,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布慨代。 她就那樣靜靜地躺著邢笙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪侍匙。 梳的紋絲不亂的頭發(fā)上氮惯,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機(jī)與錄音想暗,去河邊找鬼妇汗。 笑死,一個胖子當(dāng)著我的面吹牛江滨,可吹牛的內(nèi)容都是我干的铛纬。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼唬滑,長吁一口氣:“原來是場噩夢啊……” “哼告唆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起晶密,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤擒悬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后稻艰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體懂牧,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了僧凤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畜侦。...
    茶點(diǎn)故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖躯保,靈堂內(nèi)的尸體忽然破棺而出旋膳,到底是詐尸還是另有隱情,我是刑警寧澤途事,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布验懊,位于F島的核電站,受9級特大地震影響尸变,放射性物質(zhì)發(fā)生泄漏义图。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一召烂、第九天 我趴在偏房一處隱蔽的房頂上張望碱工。 院中可真熱鬧,春花似錦奏夫、人聲如沸痛垛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至漫谷,卻和暖如春仔雷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背舔示。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工碟婆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人惕稻。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓竖共,卻偏偏與公主長得像,于是被迫代替她去往敵國和親俺祠。 傳聞我的和親對象是個殘疾皇子公给,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容