bilibili獻給新一代的演講《后浪》
前言
在進入本文之前,我很想給大家推薦b站這個視頻,3080.2萬播放,27.9萬條彈幕,這個視頻之火不是因為漂亮的小姐姐,也不是什么很傻,很逗人發笑的視頻,而是因為那滿滿的正能量,以及對于年輕人的激勵,我們要活成我們的樣子,我們是后浪,我們遇見這個時代,時代遇見今天的我們,
弱小的人才習慣嘲諷和否定,而內心強大的人從不吝嗇贊美和鼓勵!我們就是后浪,奔涌吧!后浪,奔涌吧!新一代!相信你們看了這個視頻會內心波濤洶涌,在b站待了這么長時間,很榮幸可以看到這樣的視頻,
正文
1:我們今天的目標是爬取此視頻的彈幕,并生成詞云,一方面是為了做筆記,總結今天學到的,另一方面,我是為了分享經驗,以及讓大家看到這滿是正能量的彈幕詞云,足以沖擊你的內心,
2:實作思路
我們主要用到以下幾點知識
<1 爬蟲技術
python庫: requests , re, csv, jieba,imageio,wordcloud
<2分析網站: bill網站特定視頻
<3查找資料來源的api: 彈幕資料來源的api
3:具體實作:
我們來打開billbill這個視頻主頁:

我們要拿到的是彈幕資料,我們可以指定某天的彈幕資料,當然通過爬蟲,我們可以全部拿下,今天,我們隨便指定日期,都是一樣的道理,
既然是分析網站,自然是右鍵查看原始碼了,

這里面有資料,但不是我們的方向,我們可以清空資料,我們要拿到彈幕的api,那么,需要抓包,我們點擊b站彈幕串列下面的查看歷史彈幕,

看到上面那個日歷沒有,今天是2/17,那我就拿今天的彈幕,
下面進行抓包,我們清空network下面的所有,現在我們點擊日歷上的2/17,我們觀察會出現什么,來看

不知道你有沒有注意到這樣一段 :
seg.so?type=1&oid=186803402&date=2021-02-17
我分析這個包,后面是一個日期格式的引數,那我一定會想到,只要我按照這樣的格式,我可以指定任意一天,很可能這個就是我們要尋求的方向,我們點進去,來看

這里放大了了,希望能看到這個藍色的一行,很熟悉的,是url,下面是請求相關的,我們點進去這個url,會發現是一個檔案,這個檔案并不是普通的檔案,你可以下載,然后用notepad打開,指定格式utf-8編碼后,會顯示這樣,

我們看到里面是有彈幕中文的,但是也有不認識的東西,這里至少可以證明我們的url找對了,這樣的彈幕資料不是我想要的,因為我還要生成詞云,說以還是以代碼來處理整個程序,我會解釋相關的代碼,
來看代碼
下面展示一些 行內代碼片,
#流程
#匯入工具
import requests #第三方工具
import re #正則
import csv #處理保存csv檔案格式
import jieba #用來分詞的國人開發的庫 import wordcloud
import imageio # 讀圖片
import wordcloud #詞云庫
#目標網站
url = ' https://api.bilibili.com/x/v2/dm/web/history/seg.so?type=1&oid=186803402&date=2021-02-17'
#模擬瀏覽器發送請求,接受回傳的資料
headers = {
# 用戶代理 身份證
'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36',
# 賬號已登錄資訊
'cookie': '_uuid=DB17FC3E-C33B-0402-FEC8-6D5F54FFD75826400infoc; buvid3=524A488F-FA38-4505-A9FD-80539B19E3FB184978infoc; sid=a2zoyf7s; buvid_fp=524A488F-FA38-4505-A9FD-80539B19E3FB184978infoc; DedeUserID=650586683; DedeUserID__ckMd5=673346effe04fe44; SESSDATA=dc4b2c16%2C1628474903%2Cc95da*21; bili_jct=f92980128fe4681476212c6cfe3d0ff7; CURRENT_FNVAL=80; blackside_state=1; rpdid=|(J|)JR|||Rm0J uYukmkkmJk; fingerprint3=dc6c77bb0dfdccdd39bc9efbb780630d; fingerprint=f29725bb59f7984374f945e2ebddc362; buvid_fp_plain=524A488F-FA38-4505-A9FD-80539B19E3FB184978infoc; fingerprint_s=0a7abb581b9ea03451e614a51a3d4b2b; LIVE_BUVID=AUTO8416133069733130; bp_video_offset_650586683=491829482594004200; bsource=search_baidu; PVID=1; bfe_id=1e33d9ad1cb29251013800c68af42315'
}
resp = requests.get(url,headers=headers)
print(resp) # 列印輸出一下看是否可以正常訪問
print(resp.text)#以文本的形式列印網頁源代碼
# 獲取彈幕資料
#中文
Danmu = re.findall("[\u4e00-\u9fa5]+",resp.text) # 用到的正則,匹配中文
print(Danmu)
# 4.資料保存
for i in Danmu : #相當于一個遍歷保存
with open('B站彈幕.csv','a',newline='',encoding='utf-8') as f :
writer = csv.writer(f)
danmu = []
danmu.append(i)
writer.writerow(danmu)
# 繪制詞云
f = open('B站彈幕.csv','r',encoding='utf-8')
txt = f.read()
#print(txt)
# 1.分詞處理
textlist = jieba.lcut(txt)
print(textlist)
string1 = ' '.join(textlist) #拼接成整個字串
#print(string)
mk = imageio.imread(r'心.jpg')
w=wordcloud.WordCloud(
width = 1000,
height =700,
background_color ='white',
font_path='msyh.ttc',
mask =mk,
scale = 18,
stopwords = {'','\n','\r'},#停用詞
contour_width =5,
contour_color ='red'
)
# 將string變數傳入w的generate()方法,給詞云輸入文字
w.generate(string1)
#將詞云圖片匯出到當前檔案夾
w.to_file('out1.png')
我覺的代碼很詳細了,但是給大家在稍微說點就是為何要指定user-agent,以及cookie,
指定user-agent是為了模擬瀏覽器訪問,否則網站會認為你是爬蟲,是寫程式去訪問的,可能會被卡擦掉,當然還有指定高級的執行緒池什么的,在這里是沒必要的,cookie,保存了你登陸網站的資訊,很像一個身份證,如果你不指定cookie,那么網站會提示你登錄的,可以把他理解為身份資訊,當你訪問網站時,網站就給你存一個cookie,
這里面有一個jieba庫,是我們國人開發的,有點自豪,是用來分詞的,具體可以去查閱檔案理解相關的原始碼和方法,
re庫是匯入用來寫正則語法的庫,是用來匹配的,規則很簡單,但是東西比較多哦,當然我們也可以直接去網站查看規則,很多匹配的語法規則都有,csv是一種檔案格式,也可以去查看庫理解,并不是難事,詞云時,需要讀取csv格式檔案
代碼中wordcloud中的引數mk代表指定根據的圖片繪制詞云,這里要求圖片背景盡量為白色,里面可以有你想要的形狀,更詳細的請查看資料了解相關的方法,
我們來看代碼的實作結果,這里有我的幾個詞云,好與不好,都與圖片的選擇有關,簡單展示一下,



執行完這段代碼后,控制臺可能會列印你不需要的資訊,注釋掉即可,那是我測驗用的,還有就是不要看到控制臺列印出紅色字體就認為出錯了,你得知道他在說啥,像下面是沒有錯誤的,

就寫到這里了,相關的請遵守csdn博客協議,期待與大家共同進步,
------jgdabc 點擊訪問主頁
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/260718.html
標籤:python
下一篇:OpenCV打開視頻檔案問題
