如何爬取B站彈幕

前言

主要記錄自己完成爬蟲的思路:從how to do到what to do
這是一個拿 python 練手的專案,雖說是入門級,但其餘爬蟲也萬變不離其宗 ̄へ ̄
原始碼地址 Github:bili-danmu

過程

1. 彈幕究竟是什麼玩意

首先,讓我們看看B站客戶端是如何接收到彈幕的
這就需要讓我們看看網頁的原始碼了

隨便開啟一個視訊網頁如下:

那麼,彈幕是怎麼載入進網頁面的呢?
接下來讓我們回憶一下http請求的過程:

0. 3次握手建立TCP連線
1. 瀏覽器得到頁面,也就是html檔案
2. 根據html檔案裡如<script>標籤或<img>標籤等繼續像伺服器請求相應的資源

可以想象,彈幕檔案應該是在瀏覽器得到頁面後像伺服器請求得來的,也就是說,它隱藏在瀏覽器下載的檔案中!不妨先假想一下:彈幕檔案應該是一個JSON格式或者是XML格式的檔案 這樣才方便應用與管理

右鍵審查元素,開啟網路面板,分析瀏覽器抓取下來的包,其中有一個檔案引起了我們的注意:

這是一個xml檔案,也是我們猜測的彈幕格式之一,檢視它的內容:

很驚喜的發現,這不正是彈幕檔案嗎!  ̄へ ̄

2. 如何得到彈幕檔案

檢視彈幕檔案的檔名:

全稱http://comment.bilibili.com/6154070.xml 且看資源識別符號6154070.xml 這應該便是唯一標誌彈幕檔案的檔名了

關於6154070.xml 這個檔名是如何來的?這只有在網頁原始碼中一探究竟。右鍵檢視網頁原始碼,查詢與6154070.xml 有關的欄位:

但現在我們還是不能放心,對比其他視訊後才終於發現,原來正是這個<script> 標籤內的屬性決定了彈幕檔名

分析完畢,接下來就是最快的編碼工作了  ̄へ ̄

如何編寫爬蟲

其實分析到了這裡,程式碼編寫也是水到渠成的事了
我選擇了 requestslxml 這種輕量級的庫來編寫
Talk is cheap. Show me the code. 廢話不多說,完整程式碼請看 Github:bili-danmu

結語

對於爬蟲來說,往往分析頁面花費的時間大於編寫程式碼的時間。總而言之,大概就是這麼個流程,依葫蘆畫瓢也能搞定大部分網站內容的爬取  ̄へ ̄