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/

原文地址:https://www.cnblogs.com/Jacck/p/7751721.html