你相信逛B站也能學編程嗎?Python爬蟲B站視頻

點擊上方Python知識圈,選擇設爲星標

回覆1024獲取Python資料

作者:徐麟,某互聯網公司數據分析獅,個人公衆號數據森麟(id:shujusenlin)

閱讀文本大概需要 6 分鐘。

前言

很多人提到B站,首先想到的就會是二次元或者鬼畜。

然而,實際上B站其實是個非常神奇的網站,裏面的內容可謂是包羅萬象,有趣的彈幕文化也能極大地提高大家的體驗,B站也逐漸地成爲了一個用來學習的“神器”。

近期B站獲得了央視網的力挺,報道稱B站已經成爲了越來越多的年輕人的學習陣地,正所謂“我在B站看番,你卻在B站學習” ,今天我們就來爬取B站上那些播放量、彈幕量排名靠前的編程類視頻,一起去了解B站的另一面。

數據來源

我們此次的數據主要來源於B站搜索框中輸入“編程”後的視頻列表及相關信息:

B站一共提供了物種視頻排序的方式,每種能夠返回前1000個視頻,我們分別爬取五種排序所得到的1000個視頻之後對5000個視頻進行排序,最終得到了2000多個編程類視頻的信息

同時我們也增加了一些篩選條件,使得最終獲取到的編程教學視頻更具代表性:a.所屬分類爲科技類 b.視頻時長大於60分鐘,部分代碼如下:

## 獲得列表
def get_list(i,j):
attempts = 0
success = False
while attempts < 5 and not success:
try:
    url = 'https://search.bilibili.com/all?keyword=%E7%BC%96%E7%A8%8B&from_source=banner_search&order={}&duration=4&tids_1=36&page={}'.format(i,j+1)
    header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win32; x32; rv:54.0) Gecko/20100101 Firefox/54.0',
    'Connection': 'keep-alive'}
    cookies ='v=3; iuuid=1A6E888B4A4B29B16FBA1299108DBE9CDCB327A9713C232B36E4DB4FF222CF03; webp=true; ci=1%2C%E5%8C%97%E4%BA%AC; __guid=26581345.3954606544145667000.1530879049181.8303; _lxsdk_cuid=1646f808301c8-0a4e19f5421593-5d4e211f-100200-1646f808302c8; _lxsdk=1A6E888B4A4B29B16FBA1299108DBE9CDCB327A9713C232B36E4DB4FF222CF03; monitor_count=1; _lxsdk_s=16472ee89ec-de2-f91-ed0%7C%7C5; __mta=189118996.1530879050545.1530936763555.1530937843742.18'
    cookie = {}
    for line in cookies.split(';'):
        name, value = cookies.strip().split('=', 1)
        cookie[name] = value
        html = requests.get(url,cookies=cookie, headers=header).content
        bsObj = BeautifulSoup(html.decode('utf-8'),"html.parser")
        script = bsObj.find_all('script')[3].text
        info = json.loads(script.replace('window.__INITIAL_STATE__=','').split(';(function()')[0])['allData']['video']
    return info
    except:
        attempts = attempts+1
    return []

coding_all = []
type = ['click','stow','dm']
for i in type:
    for j in range(50):
        this_coding = get_list(i,j)
        coding_all = coding_all+this_coding

最終,我們獲取到了如下的視頻信息列表

數據分析

獲取到數據之後,我們首先關注的是這些視頻的主要內容,通過視頻給出的標籤,繪製整體內容總結的詞雲圖:

可以看到,上面的詞雲除了編程語言,技術之外包含了許多類似於學習,教程這樣的通用描述性詞彙,我們需要進一步從中篩選出與編程語言、技術相關的詞雲,提高詞雲圖的效果:

可以看到,經過篩選後的詞雲圖效果要好很多,其中基本上囊括了現在比較火的編程語言,如Java、Python 以及數據結構、機器學習這些技術類的內容,下面我們來看一下各編程語言的播放量及彈幕量對比:

我們此次將linux也劃分到語言類中,可以看到目前基本上就是處於Python、C語言、Java三組鼎力的態勢,Python略微領先於其他兩種語言,這也一定程度反映了當今的整體發展趨勢。由此可見,B站的內容也是與時俱進,適合年輕人去學習瞭解編程整體發展趨勢。

看完了語言類,我們再來看一下具體的技術類排行榜:

可以看到,前端、人工智能、數據框、爬蟲這些大家比較關心以及公司有較大需求量的技術都出現在了榜單中,在B站如果能將自己所要從事領域的視頻認真學習,也會有很大的提高,部分代碼如下:

## 分組統計
coding_tag = dataframe_explode(coding,'tag')
coding_tag['tag'] = coding_tag['tag'].apply(str.lower)
coding_tag['type'] = coding_tag['tag'].map({tag_dict['tag'][k]:tag_dict['type'][k] for k in range(tag_dict.shape[0])})
coding_tag = coding_tag.groupby(['title','pic','author','arcurl','tag','type'],as_index=False).agg({'play':'max','danmu':'max','favorites':'max','review':'max'})
tag_count = coding_tag.groupby(['tag','type'],as_index=False).agg({'title':['count'],'play':['sum'],'danmu':['sum'],'favorites':['sum']})
tag_count.columns = ['tag','type','num','play','danmu','favorites']
## 繪製圖片
coding_stat = tag_count[tag_count['type']=='語言']
coding_stat.sort_values('play',ascending=False,inplace=True)
attr = coding_stat['tag'][0:10]
v1 = coding_stat['play'][0:10]
bar = Bar("語言類播放量TOP10")
bar.add("播放數量", attr, v1, is_stack=True, xaxis_rotate=30,xaxis_label_textsize=18,
        xaxis_interval =0,is_splitline_show=False,label_text_size=12,is_label_show=True)
bar.render('語言類播放量TOP10.html')

精品視頻

分析完整體視頻內容的分佈情況,我們再來看下那些最爲精品的視頻,由於B站以彈幕文化爲特色,我們就依據彈幕量來爲大家精選出一些非常不錯的視頻,首先是所有編程類視頻的TOP20:

我們下面分別看一下三足鼎立中的Python、Java、C語言分別彈幕量排名前十的視頻信息:

寫在最後

B站的阿婆主爲爲大家提供了特別多的編程學習資源,大家在學習知識的同時,也需要注意的就是相應的版權信息。上傳視頻一定要確認版權不存在問題之後再去上傳,另外如果發現有存在侵權的問題,也要及時跟視頻作者進行反饋,及時將侵權視頻下架。

另外,希望大家能夠多多支持技術類的視頻和阿婆主,如果覺得不錯就不要吝惜手中的硬幣,讓更多的技術類阿婆主有動力爲大家提供更多更好的視頻內容

做個調查,你們一般上 B 站都看哪些內容,幫忙長按識別下方小程序投個票,可以多選,感謝

後臺回覆「編程」可以獲取爬本文的代碼。

去年國慶我寫過一篇爬取每日小視頻的文章 Python爬蟲之b站的正確打開方式 (點擊鏈接可直達原文)昨晚試了下,源碼還可以用,後臺回覆「b站」獲取爬取每日小視頻的源碼。

留言打卡 DAY 41

今日的留言話題是:你上B站一般看什麼類型的內容,可以直接參考上方小程序裏的選項,隨手幫忙投個票,感謝!關於留言打卡的規則可以參考 留言打卡送福利 (點擊鏈接查看詳細打卡規則),請按照 暱稱+天數(請以自己實際打卡的天數爲準,如day1 or day2 or day3)+ 留言內容(不少於15字)的方式留言。

Python知識圈公衆號的交流羣已經建立,羣裏可以領取 Python 和人工智能學習資料,大學可以一起學習交流,效率更高,如果是想發推文、廣告、砍價小程序的敬請繞道一定記得備註「交流學習」,我會盡快通過好友申請哦!通過好友後私聊我「學習資料」或者「進羣」都可以。

掃碼添加,備註:交流學習

往期推薦
01

這個庫厲害了,自動補全Python代碼,節省50%敲碼時間

02

用Python每天自動給女朋友免費發短信

03

入門 | 32個常用 Python 實現


分享給你的朋友

點個在看

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章