清除string内容_python爬取哔哩哔哩网页弹幕内容,并将爬取的内容以五角星的形式显示出来...
生活随笔
收集整理的這篇文章主要介紹了
清除string内容_python爬取哔哩哔哩网页弹幕内容,并将爬取的内容以五角星的形式显示出来...
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉載:03 爬蟲實例-獲取網頁彈幕內容
思路:
- 向嗶哩嗶哩網站發(fā)送請求
- 請求成功后,解析爬取的彈幕內容保存到一個文件中
- 讀取文件并分析彈幕內容中詞組或文字出現的頻率
- 將這些詞組或文字組成五角星圖形
- 組成五角星圖形后,以圖片的形式輸出
使用到的類庫,如果沒有,需要下載,下載命令:
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實現:
import requests from bs4 import BeautifulSoup import pandas as pd import re import jieba from wordcloud import WordCloud from imageio import imread import matplotlib.pyplot as plt ? ''' python學習交流群:821460695更多學習資料可以加群獲取 ''' # 網頁地址,該地址只針對嗶哩嗶哩彈幕網有效,獲取方式查看 url = "http://comment.bilibili.com/124001121.xml" ? # 網站訪問的用戶代理,建議攜帶,不攜帶可能無法訪問 header = {"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" } ? # 向對方服務器發(fā)送請求,返回訪問狀態(tài), # 返回狀態(tài)如果是以[2]開頭,表示訪問成功,[4]開頭表示網頁不存在,[5]開頭網站內部錯誤 # 訪問狀態(tài)無法直接讀取,需通過屬性[text]獲取 response = requests.get(url,header) ? # 獲取網頁的編碼規(guī)則,建議通過該方式獲取,而不是直接賦值,可能存在設置不對的情況,可能不是中文網頁 # response.encoding = "utf-8" response.encoding = response.apparent_encoding # print(response.text) ? # 獲取網頁文本內容 data = response.text ''' --將獲取到的彈幕內容處理后存放在txt文件中,并讀取出來 --網頁獲取的彈幕內容是帶html標簽的,需要將標簽和非漢字的內容清除 ''' # 解析文本xml,處理不規(guī)范標記并生成剖析樹 soup = BeautifulSoup(data,'lxml') # print(soup) # 獲取所有<d>標簽中的內容,此時是帶標簽的文本內容 d_list = soup.find_all('d') ? # 去掉<d>標簽,將文本內容存在在列表dlst dlst = [] for d in d_list:danmu = {}danmu['彈幕'] = d.text # 循環(huán)獲取所有<d>標簽中內容dlst.append(danmu) ? df = pd.DataFrame(dlst) # 將列表dlst中的內容存放在數據集中,類似于Excel表格 # print(df) ? # 創(chuàng)建并打開一個文件 f = open('cl.txt','w',encoding='utf-8') # 進行文本過濾 for i in df['彈幕'].values: # 遍歷數據集中的所有的彈幕內容pat = re.compile(r'[一-龥+]') # 定義過濾規(guī)則,只保留中文漢字,該正則表達式幾乎包含了所有漢字龥(yu,第四聲)filter_data = re.findall(pattern=pat,string=i) # 執(zhí)行過濾操作f.write(''.join(filter_data)) # 將過濾后的彈幕內容寫入創(chuàng)建的[cl.txt]文件中 f.close() ? ''' --讀取彈幕內容所在的文件[cl.txt] ''' f1 = open('cl.txt','r',encoding='utf-8') data = f1.read() ? ''' --將彈幕內容分割成詞組,并組合成五角星的圖案 ''' result = " ".join(jieba.lcut(data)) ? f1.close() color_mask = imread("五角星.jpg") # 設置數據組合的圖形,最好使用空心的圖片 wc = WordCloud(font_path="C:WindowsFontssimsun.ttc", # 數據顯示的字體width=1000,height=800,background_color='white', # 詞云的背景色mask=color_mask # 詞云組成的圖形,默認為二維 ) ? wc.generate(result) # 將彈幕內容生成詞云 wc.to_file('clanned.png') # 詞云輸出文件 ? ''' --顯示彈幕內容組成的圖片 ''' plt.imshow(wc) plt.show()知識點:
- request 向對方服務器發(fā)送請求
- BeautifulSoup 解析爬取的彈幕內容
- pandas 分析彈幕數據
- jieba 中文分詞器,或稱為中文詞組切片器
- wordcloud 加載彈幕文本,并輸出文件(這里使用圖片的方式輸出)
- matplotlib.pyplot 將整理后的彈幕文本以圖形的方式輸出(這里是以五角星的圖片為例)
- imread 讀取圖片
問題:
- 爬取的彈幕內容被保存在了文件后,后又重新讀取,是否可以不存放在文件中,直接使用列表或者其他對象存儲,然后再讀取?保存在文件和直接讀取的優(yōu)缺點是什么?
- 彈幕內容中除了漢字,實際上還包含了大量的字母,表情符號,這些內容可以通過什么正則表達式進行篩選,能否同時跟漢字一起篩選出來?
- 在導包的時候,使用[from scipy.misc import imread]報錯,用[from imageio import imread]代替即可。為什么使用scipy.misc中的imread報錯?
總結
以上是生活随笔為你收集整理的清除string内容_python爬取哔哩哔哩网页弹幕内容,并将爬取的内容以五角星的形式显示出来...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 车主注意:新一轮国内油价降了!加满一箱油
- 下一篇: websocket python爬虫_p