爬取優酷彈幕

這個夏天,《長安十二時辰》火了。 易烊千璽、雷佳音主演;馬伯庸同名小說改編。 耗巨資花費七個月時間打造七十多畝長安城。 這部劇史料嚴謹,造型考究,堪稱良心製做。 目前豆瓣評分也達到8.6的高分。git

在這裏插入圖片描述
吐槽下優酷的廣告太長了,不過告訴你們一個小道消息,支付寶鉑金會員可使用會員積分兌換一個月優酷會員哦!

1、需求背景

故事主要是講述了唐天寶三載,上元節當日的帝都長安。在一派歌舞昇平的繁華盛景中,一羣偷偷潛入的突厥狼衛醞釀着滅城的陰謀。只有一個死囚犯能挽救長安,時限爲十二個時辰,進而引起驚心動魄的故事。 github

在這裏插入圖片描述
在第一集中便出現了一個讓豬哥好奇的專業術語「 大案牘術
在這裏插入圖片描述
因而帶着疑問我就去問百度,還別說真有。
在這裏插入圖片描述
但是,百度百科=白說,而後在彈幕君的指點下才知道這 大案牘術就至關於咱們今天的大數據分析,最後不忘修改下百度百科。
在這裏插入圖片描述
而後我便再也不對這 大案牘術感到好奇,而是對彈幕大軍產生興趣,好奇你們爲何都喜歡看這部劇,你們的共同點在哪裏?這部劇有哪些吸引你們的地方?

2、功能描述

因最近恰好咱們在講爬蟲與數據分析,因此就想用咱們現代的大案牘術來分析一下這不電視劇到底爲何會火,你們都對這部電視劇的評價是什麼樣的?(全部彈幕最高頻的900個詞) 編程

在這裏插入圖片描述

3、技術方案

  1. 分析某酷彈幕加載方式而後用requests庫爬取
  2. 需大量抓取數據,近可能多
  3. 重點作數據清洗,好比:劇情、人名、高能君彈幕等等
  4. 將彈幕作成雲詞

4、技術實現

豬哥將會詳細的講解每一步的過程,但願感興趣的同窗能夠認真閱讀,而後本身動手實踐,這樣才能真的學習到知識。json

本教程只爲學習交流,不得用於商用獲利,後果自負! 若有侵權或者對任何公司或我的形成不利影響,請告知刪除跨域

1.分析並獲取彈幕接口的URL

第一步:打開某酷網站,而後點擊電視劇播放,在頁面中鼠標右鍵選擇檢查(或F12)調出瀏覽器的調試窗口。 瀏覽器

在這裏插入圖片描述
第二步:複製任意一條彈幕,而後點擊調試窗口按Control+F進行搜索!
在這裏插入圖片描述
第三步:點擊該請求的 Headers按鈕,查看請求url,而且注意請求頭中的 RefererUser-Agent參數。
在這裏插入圖片描述
只需經過以上三步彈幕加載的url便被咱們找到:

service.danmu.youku.com/list?jsonca…緩存

2.爬取彈幕數據

URL找到以後咱們即可以開始coding了,仍是老規矩:先從一條數據的抓取、提取、保存,這些都沒問題以後咱們再研究批量抓取。服務器

這裏咱們依然是用咱們的requests庫來操做,不知道requests庫是什麼東西的老鐵們先看看這篇文章:requests庫介紹cookie

在這裏插入圖片描述
有了上次的教訓,咱們此次直接把請求頭加上,一次就把彈幕數據爬取到手。

3.數據提取

第一步:提取json數據 咱們觀察返回的數據會發現,和上一篇同樣,跨域請求都是用的是jsonp,因此咱們須要對返回的數據進行稍微的截取,就是將外面的jQuery111203412576115734338_1562833192066(和最後的)去掉,只保留中間的json數據。 數據結構

在這裏插入圖片描述
這裏咱們和上篇作了一個小小的改動:豬哥使用 r.text.index('(')獲取到了回調函數的左括號的角標,而後再用這個角標去作切片,這樣的好處是能夠通用,即便jsonp返回函數名長度改變也不影響。

第二步:提取彈幕數據 獲得json以後,咱們就來分析彈幕數據在哪裏,咱們能夠在瀏覽器的調試窗口的Preview裏面查看

在這裏插入圖片描述
能夠看到 result字段裏面即是彈幕數據,並且他的數據格式是一個列表,列表中是每一個彈幕對象,彈幕對象中的 content字段就是實際的彈幕內容,好那咱們用json把他們提取並打印出來。
在這裏插入圖片描述

4.數據保存

想要的數據提取出來以後,咱們就能夠把數據保存。數據保存咱們仍是使用文件來保存,緣由是操做方便,知足需求。

在這裏插入圖片描述

5.批量爬取

完成一次請求請求的爬取、提取、保存以後,咱們來研究下如何批量保存數據。這裏和其餘批量爬取有所區別:如何爬取多集的批量數據?

在遇到問題和困難時,豬哥老是喜歡把事情或者工做量化,而後再細化,分步解決!

這裏咱們就把批量爬取分爲兩步:第一步批量爬取一集的全部彈幕;第二步爬取多集的彈幕!

第一步:爬取某一集全部彈幕 批量爬取的關鍵就在於找到分頁參數,找分頁的技巧就是:比較兩個請求url的參數,看看有何不一樣。

在這裏插入圖片描述
咱們比較 同一集第一次請求與第二次請求的url發現 mat參數不一樣,並且仍是依次遞增的趨勢,這個參數即是咱們尋找的分頁參數(其實mat參數表示分鐘數,表示獲取第幾分鐘的彈幕),找到分頁參數後咱們就能夠對原方法改造,改造思路:

將原url中分頁參數變爲可變參數,由方法傳入。而後新建一個批量爬取的方法,循環調用單次爬取方法,每次調用傳入頁數便可!

在這裏插入圖片描述
第二步:爬取多集的全部彈幕 這一步的關鍵在於找到表明集數的參數,咱們能夠一樣可使用對比的方法: 比較第一集與第二集的第一個彈幕請求URL,從而找到不一樣參數!
在這裏插入圖片描述
咱們發現第一集的 iid=1061156738、第二集的 iid=1061112026,可是這個 iid參數並非遞增,如何找到規律?

這時候咱們仍是要回到網頁中尋找答案,咱們複製第一集的iid值1061156738到瀏覽器的調試窗口搜索,找到iid就是某接口的vid值。

在這裏插入圖片描述
找到集數參數以後,咱們就能夠寫一個函數將全部集數參數爬取到。
在這裏插入圖片描述
令牌爲空?很奇怪,URL和headers咱們都填了爲何仍是不行?而瀏覽器卻能夠?

這裏須要引入另外一個請求頭:Cookie,Cookie是幹什麼的?

由於HTTP協議是無狀態協議,也就是說下次再請求服務器並不知道你是誰,因此就用Cookie和Seesion來記錄狀態,最簡單的例子就是用戶登陸後,服務器就給瀏覽器遺傳一串加密字符串(key),而後服務器本身緩存一個key-value,這樣瀏覽器每次來請求都帶上這個key,服務器就知道你是哪一個用戶!

因爲篇幅有限今天只給你們簡單介紹,考慮其重要性,後面豬哥會專門寫一篇文章介紹Cookie。

那咱們去哪裏找Cookie呢?答案固然是瀏覽器咯!

在這裏插入圖片描述
那這麼多Cookie到底哪一個纔是咱們要找的那個?這個誰也不知道,也不用找,咱們直接把全部Cookie複製到代碼裏面就能夠。

可是這種表格形式的根本沒法複製,有沒有什麼小技巧能方便咱們複製Cookie嗎?固然有,咱們點擊瀏覽器調試窗口的Console按鈕,而後輸入document.cookie就能夠看到所有Cookie啦,直接複製出來就能夠,是否是很方便!

在這裏插入圖片描述
咱們把Cookie複製到代碼裏試試吧,注意Cookie有過時時間,尤爲是這個token大概十幾分鍾可能就會過時,過時以後在瀏覽器中從新複製便可!
在這裏插入圖片描述
咱們能夠觀察到返回的數據一樣是個jsonp函數,一樣須要提取內部的json數據,因此咱們能夠封裝一個公用方法,用於提取jsonp返回的數據轉爲json對象,這樣提升了複用性!
在這裏插入圖片描述
獲得json數據以後沒咱們經過觀察能夠獲得知其數據結構,而後將vid提取出來並返回,上圖豬哥返回了一個生成器!

表明集數的id拿到了,如今咱們就能夠雙層循環去爬全部的彈幕啦,上代碼。

在這裏插入圖片描述
一共爬取了近30萬條的數據,大概用了40分鐘,固然若是你以爲時間間隔太長也可縮短,可是建議不要太頻繁,否則對人家服務器或者被監控到就很差!
在這裏插入圖片描述

6.數據清洗+生成詞雲

咱們要清洗什麼數據?其實這個事先很難猜到,因此咱們不作數據清洗直接生成雲詞看看會是什麼效果,而後再作調整。關於雲詞的生成介紹豬哥在上篇爬取京東商品評價並生成詞雲已經爲你們講過!

在這裏插入圖片描述
咱們能夠看到右側生成的詞雲,像:哈哈、不是、這個、什麼等這些詞比較多,這種單詞沒有太大的分析價值,因此咱們數據清洗便有了方向。(ps:某酷的彈幕沒啥內涵。。。)
在這裏插入圖片描述
豬哥添加了一份清洗詞列表,這樣就能夠將這些詞屏蔽掉,而後咱們再來看看效果吧!
在這裏插入圖片描述

7.分析詞雲圖

從上面的詞雲圖中咱們能夠分析出:

  1. 此電視劇中的一些主角:張小敬、李必、崔器、龍波、徐斌、居然還有人喜歡曹破延。
  2. 有人說好看,有人說看不懂,說明劇情可能有點深度
  3. 畫風可能有點像刺客信條
  4. 四字弟弟、千璽,說明劇中有易烊千璽
  5. 片尾曲可能有驚喜
  6. 大唐、長安說明了故事背景
  7. 彈幕、智商,可能你們在提醒你:關彈幕,保智商!

目前此劇已更新完第一季(20集),真的是一部國產良心劇,畫質、服裝、禮節、拍攝、劇本、演技都堪稱一流,推薦你們看看!

5、總結

咱們來從技術層面分析總結一下今天這篇文章,本篇文章看似與上一篇爬取京東商品評價並生成詞雲流程很相似,可是更難一點:

  1. 這次爬取的彈幕不只要找分頁參數,並且要找分集的參數
  2. 此次爬取彈幕須要用到Cookie,並且有過時時間
  3. 這次數據量大,對電腦性能可能會有點考驗
  4. 在生成詞雲時有數據清洗

週末、瓜子花生和啤酒 、看劇編程兩不誤,人生豈不美滋滋!

項目地址:github.com/pig6/youku_…

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