本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,如有問題請及時聯系我們以作處理,
作者:張同學
來源:凹凸資料
Python爬蟲、資料分析、網站開發等案例教程視頻免費在線觀看
https://space.bilibili.com/523606542
前言
大家好,最近的“瓜”,多到我們措手不及,可謂是“熱點不斷”,作為程式員,我們還可能隨時為此而加班,
各種評論視頻“爆炸”網路,打開首頁全是熱點話題的內容,某知名UP主發布視頻都要錯下峰,
我就在思考:這么火爆的話題和內容,有沒有一種通用的分析方法?答案是:抓取彈幕或者評論,
下面就讓我們以冰冰vlog的視頻彈幕為例,來進行分析,
一、獲取方法
1.網頁決議:網頁結構可能隨時會發生變化,
2.python第三方api:可能會有維護跟不上的問題,
經過簡單對比,我選擇第一種方法,
二、網頁分析
爬取彈幕的關鍵是獲取視頻的cid,有些地方也叫oid,通過瀏覽器的開發者模式我們不難找到該視頻的cid,我們通過https://comment.bilibili.com/+視頻的cid+.xml就可以爬取該視頻所有彈幕了,
三、彈幕檔案下載和決議
由于彈幕內容集中在xml檔案里,我們需要對檔案進行下載,使用xpath決議檔案,
from lxml import etree import requests import time import jieba import numpy as np from PIL import Image from wordcloud import WordCloud as wc class Bilibili(): """docstring for Bilibili""" def __init__(self,oid): self.headers={ 'Host': 'api.bilibili.com', 'Connection': 'keep-alive', 'Cache-Control': 'max-age=0', 'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 'Accept-Encoding': 'gzip, deflate, br', 'Accept-Language': 'zh-CN,zh;q=0.9', 'Cookie': 'finger=edc6ecda; LIVE_BUVID=AUTO1415378023816310; stardustvideo=1; CURRENT_FNVAL=8; buvid3=0D8F3D74-987D-442D-99CF-42BC9A967709149017infoc; rpdid=olwimklsiidoskmqwipww; fts=1537803390' } self.url='https://api.bilibili.com/x/v1/dm/list.so?oid='+str(oid) self.barrage_reault=self.get_page() # 獲取資訊 def get_page(self): try: # 延時操作,防止太快爬取 time.sleep(0.5) response=requests.get(self.url,headers=self.headers) except Exception as e: print('獲取xml內容失敗,%s' % e) return False else: if response.status_code == 200: # 下載xml檔案 with open('bilibili.xml','wb') as f: f.write(response.content) return True else: return False # 決議網頁 def param_page(self): time.sleep(1) if self.barrage_reault: # 檔案路徑,html決議器 html=etree.parse('bilibili.xml',etree.HTMLParser()) # xpath決議,獲取當前所有的d標簽下的所有文本內容 results=html.xpath('//d//text()') return results
四、彈幕去重
重復的彈幕進行歸類,未出現過的彈幕創建新的分類,為詞頻統計和詞云做好準備,
# 彈幕去重 def remove_double_barrage(self): ''' double_arrage:所有重復彈幕的集合 results:去重后的彈幕 barrage:每種彈幕內容都存盤一遍 ''' double_barrage=[] results=[] barrage=set() for result in self.param_page(): if result not in results: results.append(result) else: double_barrage.append(result) barrage.add(result) return double_barrage,results,barrage
五、彈幕重復次數統計和制作詞云
我們在網上照一張“王冰冰”的照片,進行簡單的處理,作為詞云的輪廓圖,
# 彈幕重復次數和詞云制作 def make_wordCould(self): double_barrages,results,barrages=self.remove_double_barrage() # 重詞計數 with open('barrages.txt','w') as f: for barrage in barrages: amount=double_barrages.count(barrage) f.write(barrage+':'+str(amount+1)+'\n') # 設定停用詞 stop_words=['【','】',',','.','?','!',','] words=[] if results: for result in results: for stop in stop_words: result=''.join(result.split(stop)) words.append(result) # 串列拼接成字串 words=''.join(words) words=jieba.cut(words) words=''.join(words) bingbing=np.array(Image.open('冰冰.jpg')) w=wc(font_path='?C:/Windows/Fonts/SIMYOU.TTF', background_color='white', width=900, height=600, max_font_size=15, min_font_size =1, max_words=3000, mask=bingbing) w.generate(words) w.to_file('bingbing.jpg') b=Bilibili(283851334)#視頻的cid b.make_wordCould()#繪制詞云
統計結果:
詞云圖效果:
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/252457.html
標籤:Python
下一篇:Python爬蟲學習筆記(一)

