Python登陸豆瓣並爬取影評

上一篇咱們講過Cookie相關的知識,瞭解到Cookie是爲了交互式web而誕生的,它主要用於如下三個方面:html

  1. 會話狀態管理(如用戶登陸狀態、購物車、遊戲分數或其它須要記錄的信息)
  2. 個性化設置(如用戶自定義設置、主題等)
  3. 瀏覽器行爲跟蹤(如跟蹤分析用戶行爲等)

咱們今天就用requests庫來登陸豆瓣而後爬取影評爲例子, 用代碼講解下Cookie的會話狀態管理(登陸)功能python

此教程僅用於學習,不得商業獲利!若有侵害任何公司利益,請告知刪除!git

1、需求背景

以前豬哥帶你們爬取了優酷的彈幕並生成詞雲圖片,發現優酷彈幕的質量並不高,有不少介詞和一些無效詞,好比:哈哈、啊啊、這些、那些。。。而豆瓣口碑一直不錯,有些書或者電影的推薦都很不錯,因此咱們今天來爬取下豆瓣的影評,而後生成詞雲,看看效果如何吧!github

2、功能描述

咱們使用requests庫登陸豆瓣,而後爬取影評,最後生成詞雲!web

爲何咱們以前的案例(京東、優酷等)中不須要登陸,而今天爬取豆瓣須要登陸呢?那是由於豆瓣在沒有登陸狀態狀況下只容許你查看前200條影評,以後就須要登陸才能查看,這也算是一種反扒手段! 正則表達式

在這裏插入圖片描述

3、技術方案

咱們看下簡單的技術方案,大體能夠分爲三部分:瀏覽器

  1. 分析豆瓣的登陸接口並用requests庫實現登陸並保存cookie
  2. 分析豆瓣影評接口實現批量抓取數據
  3. 使用詞雲作影評數據分析

方案肯定以後咱們就開始實際操做吧!微信

4、登陸豆瓣

作爬蟲前咱們都是先從瀏覽器開始,使用調試窗口查看url。cookie

1.分析豆瓣登陸接口

打開登陸頁面,而後調出調試窗口,輸入用戶名和密碼,點擊登陸。 網絡

在這裏插入圖片描述
這裏豬哥建議輸入錯誤的密碼,這樣就不會由於頁面跳轉而捕捉不到請求!上面咱們便獲取到登陸請求的URL: accounts.douban.com/j/mobile/lo…

由於是一個POST請求,因此咱們還須要看看請求登陸時攜帶的參數,咱們將調試窗口往下拉查看Form Data

在這裏插入圖片描述

2.代碼實現登陸豆瓣

獲得登陸請求URL和參數後,咱們就能夠來用requests庫來寫一個登陸功能!

在這裏插入圖片描述

3.保存會話狀態

上期咱們在爬取優酷彈幕的時候咱們是複製瀏覽器中的Cookie到請求頭中這來來保存會話狀態,可是咱們如何讓代碼自動保存Cookie呢?

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

cookie = http.cookiejar.CookieJar()
handler = urllib.request.HttpCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
opener(url)
複製代碼

可是前面咱們介紹requests庫的時候就說過:

requests庫是一個基於urllib/3的第三方網絡庫,它的特色是功能強大,API優雅。由上圖咱們能夠看到,對於http客戶端python官方文檔也推薦咱們使用requests庫,實際工做中requests庫也是使用的比較多的庫。

因此今天咱們來看看requests庫是如何優雅的幫咱們自動保存Cookie的?咱們來對代碼作一點微調,使之能自動保存Cookie維持會話狀態!

在這裏插入圖片描述
上述代碼中,咱們作了兩處改動:

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

咱們能夠看到發起請求的對象變成了session對象,它和原來的requests對象發起請求方式同樣,只不過它每次請求會自動帶上Cookie,因此後面咱們都用Session對象來發起請求!

4.這個Session對象是咱們常說的session嗎?

講到這裏也許有同窗會問:requests.Session對象是否是咱們常說的session呢?

答案固然不是,咱們常說的session是保存在服務端的,而requests.Session對象只是一個用於保存Cookie的對象而已,咱們能夠看看它的源碼介紹

在這裏插入圖片描述
因此你們千萬不要將requests.Session對象與session技術搞混了!

5、爬取影評

咱們實現了登陸和保存會話狀態以後,就能夠開始幹正事啦!

1.分析豆瓣影評接口

首先在豆瓣中找到本身想要分析的電影,這裏豬哥選擇一部美國電影**《荒野生存》**,由於這部電影是豬哥心中之最,沒有之一!

在這裏插入圖片描述
而後下拉找到影評,調出調試窗口,找到加載影評的URL
在這裏插入圖片描述

2.爬取一條影評數據

在這裏插入圖片描述
可是爬取下來的是一個HTML網頁數據,咱們須要將影評數據提取出來
在這裏插入圖片描述

3.影評內容提取

上圖中咱們能夠看到爬取返回的是html,而影評數據即是嵌套在html標籤中,如何提取影評內容呢?

這裏咱們使用正則表達式來匹配想要的標籤內容,固然也有更高級的提取方法,好比使用某些庫(好比bs四、xpath等)去解析html提取內容,並且使用庫效率也比較高,但這是咱們後面的內容,咱們今天就用正則來匹配!

咱們先來分析下返回html 的網頁結構

在這裏插入圖片描述
咱們發現影評內容都是在 <span class="short"></span>這個標籤裏,那咱們 就能夠寫正則來匹配這個標籤裏的內容啦!
在這裏插入圖片描述
檢查下提取的內容
在這裏插入圖片描述

4.批量爬取

咱們爬取、提取、保存完一條數據以後,咱們來批量爬取一下。根據前面幾回爬取的經驗,咱們知道批量爬取的關鍵在於找到分頁參數,咱們能夠很快發現URL中有一個start參數即是控制分頁的參數。

在這裏插入圖片描述
這裏只爬取了25頁就爬完,咱們能夠去瀏覽器中驗證一下,是否是真的只有25頁,豬哥驗證過確實只有25頁!

6、分析影評

數據抓取下來以後,咱們就來使用詞雲分析一下這部電影吧!

基於使用詞雲分析的案例前面已經講過兩個了,因此豬哥只會簡單的講解一下!

1.使用結巴分詞

由於咱們下載的影評是一段一段的文字,而咱們作的詞雲是統計單詞出現的次數,因此須要先分詞!

在這裏插入圖片描述

2.使用詞雲分析

在這裏插入圖片描述
最終成果:
在這裏插入圖片描述
從這些詞中咱們能夠知道這是關於一部關於 追尋自我現實生活的電影,豬哥裂牆推薦!!!

7、總結

今天咱們以爬取豆瓣爲例子,學到了很多的東西,來總結一下:

  1. 學習如何使用requests庫發起POST請求
  2. 學習瞭如何使用requests庫登陸網站
  3. 學習瞭如何使用requests庫的Session對象保持會話狀態
  4. 學習瞭如何使用正則表達式提取網頁標籤中的內容

鑑於篇幅有限,爬蟲過程當中遇到的不少細節和技巧並無徹底寫出來,因此但願你們能本身動手實踐,固然也能夠加入到豬哥的Python新手交流羣中和你們一塊兒學習,遇到問題也能夠在羣裏提問!加羣請加豬哥微信:it-pig66,好友申請格式:加羣-xxx!

源碼地址:github.com/pig6/douban…

在這裏插入圖片描述
相關文章
相關標籤/搜索