1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # author:albert time:2019/10/28 4 import requests 5 from bs4 import BeautifulSoup 6 import pandas as pd 7 import re 8 import jieba 9 from wordcloud import WordCloud 10 from imageio import imread 11 import matplotlib.pyplot as plt 12 13 ''' 14 --獲取網站彈幕列表內容 15 ''' 16 # 網頁地址,該地址只針對嗶哩嗶哩彈幕網有效,獲取方式查看 17 url = "http://comment.bilibili.com/124001121.xml" 18 19 # 網站訪問的用戶代理,建議攜帶,不攜帶可能沒法訪問 20 header = { 21 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36" 22 } 23 24 # 向對方服務器發送請求,返回訪問狀態, 25 # 返回狀態若是是以[2]開頭,表示訪問成功,[4]開頭表示網頁不存在,[5]開頭網站內部錯誤 26 # 訪問狀態沒法直接讀取,需經過屬性[text]獲取 27 response = requests.get(url,header) 28 29 # 獲取網頁的編碼規則,建議經過該方式獲取,而不是直接賦值,可能存在設置不對的狀況,可能不是中文網頁 30 # response.encoding = "utf-8" 31 response.encoding = response.apparent_encoding 32 # print(response.text) 33 34 # 獲取網頁文本內容 35 data = response.text 36 ''' 37 --將獲取到的彈幕內容處理後存放在txt文件中,並讀取出來 38 --網頁獲取的彈幕內容是帶html標籤的,須要將標籤和非漢字的內容清除 39 ''' 40 # 解析文本xml,處理不規範標記並生成剖析樹 41 soup = BeautifulSoup(data,'lxml') 42 # print(soup) 43 # 獲取全部<d>標籤中的內容,此時是帶標籤的文本內容 44 d_list = soup.find_all('d') 45 46 # 去掉<d>標籤,將文本內容存在在列表dlst 47 dlst = [] 48 for d in d_list: 49 danmu = {} 50 danmu['彈幕'] = d.text # 循環獲取全部<d>標籤中內容 51 dlst.append(danmu) 52 53 df = pd.DataFrame(dlst) # 將列表dlst中的內容存放在數據集中,相似於Excel表格 54 # print(df) 55 56 # 建立並打開一個文件 57 f = open('cl.txt','w',encoding='utf-8') 58 # 進行文本過濾 59 for i in df['彈幕'].values: # 遍歷數據集中的全部的彈幕內容 60 pat = re.compile(r'[一-龥+]') # 定義過濾規則,只保留中文漢字,該正則表達式幾乎包含了全部漢字龥(yu,第四聲) 61 filter_data = re.findall(pattern=pat,string=i) # 執行過濾操做 62 f.write(''.join(filter_data)) # 將過濾後的彈幕內容寫入建立的[cl.txt]文件中 63 f.close() 64 65 ''' 66 --讀取彈幕內容所在的文件[cl.txt] 67 ''' 68 f1 = open('cl.txt','r',encoding='utf-8') 69 data = f1.read() 70 71 ''' 72 --將彈幕內容分割成詞組,並組合成五角星的圖案 73 ''' 74 result = " ".join(jieba.lcut(data)) 75 76 f1.close() 77 color_mask = imread("五角星.jpg") # 設置數據組合的圖形,最好使用空心的圖片 78 wc = WordCloud( 79 font_path="C:\Windows\Fonts\simsun.ttc", # 數據顯示的字體 80 width=1000, 81 height=800, 82 background_color='white', # 詞雲的背景色 83 mask=color_mask # 詞雲組成的圖形,默認爲二維 84 ) 85 86 wc.generate(result) # 將彈幕內容生成詞雲 87 wc.to_file('clanned.png') # 詞雲輸出文件 88 89 ''' 90 --顯示彈幕內容組成的圖片 91 ''' 92 plt.imshow(wc) 93 plt.show()
使用到的類庫,若是沒有,須要下載,下載命令:html
pip install requests pip install bs4 pip install pandas pip install lxml # 在解析xml文件時,須要使用 pip install jieba pip install wordcloud pip install imageio pip install matplotlib