python爬蟲實戰之bilibili彈幕生成雲圖


突然想到了這個題目,先開了題,看能不能一次搞定,#后記,花了兩天時間搞定的,一直想用自己的方法爬,但是效果都不好

首先去分析一下bilibili的網站請求,但是彈幕的異步傳輸的包抓不到(或者隱藏的好,或者是我技術水平有限),然后網上比較一致的看法是在JS里暴露了一個彈幕xml文件的id,然后用一個新的請求把xml文件下載下來,然后分析。

大體思路是:用avid去拿到cid,cid獲取到彈幕文件,解析彈幕文件,生成雲圖

 搞了兩天,先把代碼扔上來

from selenium import webdriver
from bs4 import BeautifulSoup
import re
from wordcloud import WordCloud
from scipy.misc import imread
import matplotlib.pyplot as plt

driver=webdriver.PhantomJS()
driver.get('http://www.bilibili.com/video/av15719999/')  #用的是selenium和webdriver,試過用requests庫的get方法,不成功
soup = BeautifulSoup(driver.page_source,'lxml')          #把返回的html解析出來

sc = soup.find('script',text=re.compile("EmbedPlayer*"))#找到有特定詞‘EmbedPlayer’的script標簽
sc1 =str(sc)  #截取cid的值
a = sc1.find('cid=');  
b = sc1.find('&');
sc2=sc1[a+4:b]
# print(sc2)
driver.get(
"http://comment.bilibili.com/"+sc2+".xml") #這個是重點,通過剛才拿到的cid去把彈幕的xml文件拿下來 soupxml = BeautifulSoup(driver.page_source,'lxml') ds =soupxml.find_all('d')#拿到所有的彈幕節點 cuttext ='' for d in ds: cuttext = cuttext+' '+str(d.text);#使用一個字符串把文件串起來 #print(cuttext)
#初始化詞雲 color_mask = imread("425176.jpg") # 讀取背景圖片 cloud = WordCloud( # 設置字體,不指定就會出現亂碼,這個文件是字體文件,可以去網上下載一個,然后寫上路徑 font_path="SourceHanSerif-Heavy.ttc", # 設置背景色 background_color='white', # 詞雲形狀,就是剛才讀取的背景圖片 mask=color_mask, # 允許最大詞匯,出os報錯的時候可能就是這個設置過大了 max_words=100, # 最大號字體,出os報錯的時候可能就是這個設置過大了 # max_font_size=40 ) word_cloud = cloud.generate_from_text(cuttext) # 產生詞雲 word_cloud.to_file("3.png") # 保存圖片 # 顯示詞雲圖片 plt.imshow(word_cloud) plt.axis('off') plt.show()

 

不嫌棄的話可以訪問我的個人主頁,已經把功能集成到上邊去了。在Funs功能列表中

http://1163949417-jack.55555.io/west/main/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM