Python登錄豆瓣并爬取影評

上一篇我們講過Cookie相關(guān)的知識较剃,了解到Cookie是為了交互式web而誕生的凫乖,它主要用于以下三個方面:

  1. 會話狀態(tài)管理(如用戶登錄狀態(tài)删掀、購物車泽论、游戲分數(shù)或其它需要記錄的信息)
  2. 個性化設(shè)置(如用戶自定義設(shè)置鹦赎、主題等)
  3. 瀏覽器行為跟蹤(如跟蹤分析用戶行為等)

我們今天就用requests庫來登錄豆瓣然后爬取影評為例子基跑,
用代碼講解下Cookie的會話狀態(tài)管理(登錄)功能吃媒。

此教程僅用于學習,不得商業(yè)獲利赘那!如有侵害任何公司利益,請告知刪除祠斧!

一拱礁、需求背景

之前豬哥帶大家爬取了優(yōu)酷的彈幕并生成詞云圖片,發(fā)現(xiàn)優(yōu)酷彈幕的質(zhì)量并不高吴超,有很多介詞和一些無效詞填抬,比如:哈哈、啊啊赘娄、這些宏蛉、那些。揍堰。嗅义。而豆瓣口碑一直不錯,有些書或者電影的推薦都很不錯之碗,所以我們今天來爬取下豆瓣的影評褪那,然后生成詞云式塌,看看效果如何吧友浸!

二、功能描述

我們使用requests庫登錄豆瓣武学,然后爬取影評伦意,最后生成詞云!

為什么我們之前的案例(京東沛鸵、優(yōu)酷等)中不需要登錄缆八,而今天爬取豆瓣需要登錄呢?那是因為豆瓣在沒有登錄狀態(tài)情況下只允許你查看前200條影評栏妖,之后就需要登錄才能查看奖恰,這也算是一種反扒手段!
[圖片上傳失敗...(image-705862-1563756627445)]

三论泛、技術(shù)方案

我們看下簡單的技術(shù)方案蛹屿,大致可以分為三部分:

  1. 分析豆瓣的登錄接口并用requests庫實現(xiàn)登錄并保存cookie
  2. 分析豆瓣影評接口實現(xiàn)批量抓取數(shù)據(jù)
  3. 使用詞云做影評數(shù)據(jù)分析

方案確定之后我們就開始實際操作吧!

四坟瓢、登錄豆瓣

做爬蟲前我們都是先從瀏覽器開始犹撒,使用調(diào)試窗口查看url。

1.分析豆瓣登錄接口

打開登錄頁面诚镰,然后調(diào)出調(diào)試窗口,輸入用戶名和密碼怕享,點擊登錄。
[圖片上傳失敗...(image-39c42-1563756627445)]
這里豬哥建議輸入錯誤的密碼镰踏,這樣就不會因為頁面跳轉(zhuǎn)而捕捉不到請求函筋!上面我們便獲取到登錄請求的URL:https://accounts.douban.com/j/mobile/login/basic

因為是一個POST請求,所以我們還需要看看請求登錄時攜帶的參數(shù)奠伪,我們將調(diào)試窗口往下拉查看Form Data跌帐。
[圖片上傳失敗...(image-249e42-1563756627445)]

2.代碼實現(xiàn)登錄豆瓣

得到登錄請求URL和參數(shù)后,我們就可以來用requests庫來寫一個登錄功能绊率!
[圖片上傳失敗...(image-a36f3d-1563756627445)]

3.保存會話狀態(tài)

上期我們在爬取優(yōu)酷彈幕的時候我們是復(fù)制瀏覽器中的Cookie到請求頭中這來來保存會話狀態(tài)谨敛,但是我們?nèi)绾巫尨a自動保存Cookie呢?

也許你見過或者使用過urllib庫滤否,它用來保存Cookie的方式如下:

cookie = http.cookiejar.CookieJar()
handler = urllib.request.HttpCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
opener(url)

但是前面我們介紹requests庫的時候就說過:

requests庫是一個基于urllib/3的第三方網(wǎng)絡(luò)庫,它的特點是功能強大藐俺,API優(yōu)雅炊甲。由上圖我們可以看到,對于http客戶端python官方文檔也推薦我們使用requests庫欲芹,實際工作中requests庫也是使用的比較多的庫卿啡。

所以今天我們來看看requests庫是如何優(yōu)雅的幫我們自動保存Cookie的?我們來對代碼做一點微調(diào)菱父,使之能自動保存Cookie維持會話狀態(tài)颈娜!
[圖片上傳失敗...(image-580033-1563756627445)]
上述代碼中,我們做了兩處改動:

  1. 在最上面增加一行s = requests.Session()浙宜,生成Session對象用來保存Cookie
  2. 發(fā)起請求不再是原來的requests對象官辽,而是變成了Session對象

我們可以看到發(fā)起請求的對象變成了session對象,它和原來的requests對象發(fā)起請求方式一樣粟瞬,只不過它每次請求會自動帶上Cookie野崇,所以后面我們都用Session對象來發(fā)起請求!

4.這個Session對象是我們常說的session嗎亩钟?

講到這里也許有同學會問:requests.Session對象是不是我們常說的session呢乓梨?

答案當然不是,我們常說的session是保存在服務(wù)端的清酥,而requests.Session對象只是一個用于保存Cookie的對象而已扶镀,我們可以看看它的源碼介紹
[圖片上傳失敗...(image-48e251-1563756627445)]
所以大家千萬不要將requests.Session對象與session技術(shù)搞混了!

五焰轻、爬取影評

我們實現(xiàn)了登錄和保存會話狀態(tài)之后臭觉,就可以開始干正事啦!

1.分析豆瓣影評接口

首先在豆瓣中找到自己想要分析的電影,這里豬哥選擇一部美國電影《荒野生存》蝠筑,因為這部電影是豬哥心中之最狞膘,沒有之一!
[圖片上傳失敗...(image-f9f223-1563756627445)]
然后下拉找到影評什乙,調(diào)出調(diào)試窗口挽封,找到加載影評的URL
[圖片上傳失敗...(image-6bd705-1563756627445)]

2.爬取一條影評數(shù)據(jù)

[圖片上傳失敗...(image-ec98b2-1563756627445)]
但是爬取下來的是一個HTML網(wǎng)頁數(shù)據(jù),我們需要將影評數(shù)據(jù)提取出來
[圖片上傳失敗...(image-559de5-1563756627445)]

3.影評內(nèi)容提取

上圖中我們可以看到爬取返回的是html臣镣,而影評數(shù)據(jù)便是嵌套在html標簽中辅愿,如何提取影評內(nèi)容呢?

這里我們使用正則表達式來匹配想要的標簽內(nèi)容忆某,當然也有更高級的提取方法点待,比如使用某些庫(比如bs4、xpath等)去解析html提取內(nèi)容弃舒,而且使用庫效率也比較高癞埠,但這是我們后面的內(nèi)容,我們今天就用正則來匹配聋呢!

我們先來分析下返回html 的網(wǎng)頁結(jié)構(gòu)
[圖片上傳失敗...(image-92ec48-1563756627445)]
我們發(fā)現(xiàn)影評內(nèi)容都是在<span class="short"></span>這個標簽里燕差,那我們 就可以寫正則來匹配這個標簽里的內(nèi)容啦!
[圖片上傳失敗...(image-c4f88e-1563756627445)]
檢查下提取的內(nèi)容
[圖片上傳失敗...(image-8a5865-1563756627445)]

4.批量爬取

我們爬取坝冕、提取徒探、保存完一條數(shù)據(jù)之后,我們來批量爬取一下喂窟。根據(jù)前面幾次爬取的經(jīng)驗测暗,我們知道批量爬取的關(guān)鍵在于找到分頁參數(shù),我們可以很快發(fā)現(xiàn)URL中有一個start參數(shù)便是控制分頁的參數(shù)磨澡。
[圖片上傳失敗...(image-81fdbb-1563756627445)]
這里只爬取了25頁就爬完碗啄,我們可以去瀏覽器中驗證一下,是不是真的只有25頁稳摄,豬哥驗證過確實只有25頁稚字!

六、分析影評

數(shù)據(jù)抓取下來之后厦酬,我們就來使用詞云分析一下這部電影吧胆描!

基于使用詞云分析的案例前面已經(jīng)講過兩個了,所以豬哥只會簡單的講解一下仗阅!

1.使用結(jié)巴分詞

因為我們下載的影評是一段一段的文字昌讲,而我們做的詞云是統(tǒng)計單詞出現(xiàn)的次數(shù),所以需要先分詞减噪!
[圖片上傳失敗...(image-e51e6-1563756627445)]

2.使用詞云分析

[圖片上傳失敗...(image-9042fc-1563756627445)]
最終成果:
[圖片上傳失敗...(image-30fe57-1563756627445)]
從這些詞中我們可以知道這是關(guān)于一部關(guān)于追尋自我現(xiàn)實生活的電影短绸,豬哥裂墻推薦3荡怠!醋闭!

七窄驹、總結(jié)

今天我們以爬取豆瓣為例子,學到了不少的東西证逻,來總結(jié)一下:

  1. 學習如何使用requests庫發(fā)起POST請求
  2. 學習了如何使用requests庫登錄網(wǎng)站
  3. 學習了如何使用requests庫的Session對象保持會話狀態(tài)
  4. 學習了如何使用正則表達式提取網(wǎng)頁標簽中的內(nèi)容

鑒于篇幅有限乐埠,爬蟲過程中遇到的很多細節(jié)和技巧并沒有完全寫出來,所以希望大家能自己動手實踐瑟曲,當然也可以加入到豬哥的Python新手交流群中和大家一起學習,遇到問題也可以在群里提問豪治!加群請加豬哥微信:it-pig66洞拨,好友申請格式:加群-xxx!

源碼地址:https://github.com/pig6/douban_comments_spider

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末负拟,一起剝皮案震驚了整個濱河市烦衣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌掩浙,老刑警劉巖花吟,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異厨姚,居然都是意外死亡衅澈,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門谬墙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來今布,“玉大人,你說我怎么就攤上這事拭抬〔磕” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵造虎,是天一觀的道長傅蹂。 經(jīng)常有香客問我,道長算凿,這世上最難降的妖魔是什么份蝴? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮氓轰,結(jié)果婚禮上搞乏,老公的妹妹穿的比我還像新娘。我一直安慰自己戒努,他們只是感情好请敦,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布镐躲。 她就那樣靜靜地躺著,像睡著了一般侍筛。 火紅的嫁衣襯著肌膚如雪萤皂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天匣椰,我揣著相機與錄音裆熙,去河邊找鬼。 笑死禽笑,一個胖子當著我的面吹牛入录,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播佳镜,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼僚稿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蟀伸?” 一聲冷哼從身側(cè)響起蚀同,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎啊掏,沒想到半個月后蠢络,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡迟蜜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年刹孔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娜睛。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡芦疏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出微姊,到底是詐尸還是另有隱情酸茴,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布兢交,位于F島的核電站薪捍,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏配喳。R本人自食惡果不足惜酪穿,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望晴裹。 院中可真熱鬧被济,春花似錦、人聲如沸涧团。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至钮追,卻和暖如春预厌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背元媚。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工轧叽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人刊棕。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓炭晒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親甥角。 傳聞我的和親對象是個殘疾皇子网严,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

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