先看下最終實現的效果
具體實現思路是
1.爬取帶有彈幕信息的網頁
2.處理爬取得到的內容並提取所需要的彈幕信息,然后寫入文本中
3.通過詞雲庫將文本處理成想要的圖片
所需要用到的庫
import requests from bs4 import BeautifulSoup import pandas as pd import re import jieba from wordcloud import WordCloud from scipy.misc import imread import matplotlib.pyplot as plt
首先爬取想要的信息
ps(嗶哩嗶哩的彈幕全部保存在 http://comment.bilibili.com/122512779.xml 中,紅色字體為該視頻的cid,可以在當前視頻頁通過:查看網頁源代碼—ctrl+f查找cid-出現的第一個9位cid,來獲取)
url = 'http://comment.bilibili.com/.xml' #對方的url header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'} res = requests.get(url=url, headers=header) #向對方網頁發送請求 res.encoding = res.apparent_encoding #將編碼設置為對方網頁的編碼,確保不會出現亂碼 data = res.text #獲取文本 soup = BeautifulSoup(data, 'lxml') #進行過濾操作,需要用到lxml包,無需導入。pip install lxml d_list = soup.find_all('d') #獲取所有的d標簽中的內容
然后提取其中的彈幕,將其放入文本中,最后通過jieba庫處理成詞語
dlst = [] for d in d_list: # 循環拿出所有的d標簽 danmu = {} danmu['彈幕'] = d.text # 獲取文本信息 # danmu['時間'] = datetime.datetime.now() # danmu['路徑'] = url dlst.append(danmu) df = pd.DataFrame(dlst) # 轉換成二維數組,類似於execl表格 f = open('sign.txt', 'w', encoding='utf-8') # 打開文件 for i in df['彈幕'].values: # 循環所有的文本信息 pat = re.compile(r'[一-龥]+') # 定義過濾數據的規則,所有的漢字 filter_data = re.findall(pattern=pat, string=i) # 執行過濾操作 f.write("".join(filter_data)) # 寫入文本 f.close() f = open('sign.txt', 'r', encoding='utf8') data = f.read() result = " ".join(jieba.lcut(data)) f.close()
最后通過wordcloud庫提供的方法將其轉化為圖片
color_mask = imread('th.png') wc = WordCloud( font_path=r'C:\Windows\Fonts\STKAITI.TTF', width=1000, height=800, mask=color_mask, background_color='black' ) wc.generate(result) #讀取文本數據 wc.to_file('bili.jpg') #輸出圖片 plt.imshow(wc) plt.show()