最近有一部很火的悬疑剧:《隐秘的角落》,豆瓣评分9.0,周末没事做,追在同时,我们抓取了节目第一期的弹幕。我们分析了弹幕,做了一个词云,看看观众对节目的评价。整篇文章分为两部分:1.抓取爱奇艺第一期节目的弹幕2.抓取的弹幕处理并制作词云。与其他视频网站相比,爬取爱奇艺的弹幕难度更高。为什么,因为你爬出来的文件是乱码(下面会贴出图片),需要你自己上传文件,二进制编码后才能使用。具体步骤如下:首先打开浏览器,进入爱奇艺页面,点击放映,弹幕打开,然后F12,浏览器底部或右侧会弹出一些界面,选择网络,然后点击我图片上标注的方框输入“bullet”搜索弹幕相关文件。为什么要进入这个搜索,因为这个词的意思是弹幕,程序员一般都会给东西起个正规的名字,视频网站上弹幕相关的文件大多都是这个名字哈哈。如果您F12搜索后没有内容,只需单击浏览器刷新按钮即可。下图中的箭头指代网络、搜索框、弹幕文件名、弹幕内容(大家可以看到,弹幕内容是一堆乱码)。还有一点需要注意的是,每集的弹幕文件不止一个,爱奇艺加载一个弹幕文件需要5分钟(为什么要5分钟,下面会解释)。接下来观察弹幕文件出现的规律和弹幕文件地址的规律。总结如下:弹幕文件链接规律为https://cmts.iqiyi.com/bullet...;x的计算方法是电影总时长除以300秒向上取整,即每5分钟一包。什么是电视?它是您的URL导航栏中的那个。为什么x要一个包裹按5分钟?因为我在F12之后查看了两个相邻的弹幕文件包,5分钟加载了一个。第一集总时长77分钟。如果在5分钟内加载一个弹幕文件,四舍五入,我们总共需要抓取16(77/5+1)个弹幕文件。抓包代码为:importzlibimportrequestsforxinrange(16):x+=1#x是从1到16,16是怎么来的,第一集77分钟,爱奇艺每5分钟加载一次新弹幕第77分钟除以5后取整#这一步取出来的文件是乱码。bulletnew=bytearray(bulletold)#对上一步的乱码文件进行二进制编码xml=zlib.decompress(bulletnew,15+32).decode('utf-8')#将编码后的文件分别写入16个xml文件(类似txt文件),方便后面取数据用open('./iqiyi'+str(x)+'.xml','a+',encoding='utf-8')asf:f.write(xml)f.close()抓取的xml文件如下图所示。可以看出content字段就是弹幕:将xml文件中的content字段取出来,保存为dan_mu。txt文件,方便我们后面做词云:fromxml.dom.minidomimportparseimportxml.dom.minidomforxinrange(16):x+=1DOMTree=xml.dom.minidom.parse(r"C:\Users\dmj\PycharmProjects\test\iqiyi"+str(x)+".xml")collection=DOMTree.documentElement#获取集合中的所有词条数据entries=collection.getElementsByTagName("entry")print(entrys)条目中的条目:content=entry.getElementsByTagName('content')[0]打印(content.childNodes[0].data)i=content.childNodes[0].datawithopen("dan??_mu.txt",mode="a+",encoding="utf-8")asf:f.write(i)f.write("\n")dan_mu.txt文件是这样的:制作词云使用python的wordcloud库和jieba库制作词云,代码如下:来自wordcloudimportWordCloudimportjiebaimportmatplotlib.pyplotasplt#读取弹幕txt文件withopen('./dan_mu.txt',encoding='utf-8',mode='r')asf:myText=f.read()myText="".join(jieba.cut(myText))list=myText.split("")#清理无用数据foriinrange(len(list)-1,-1,-1):iflen(list[i])==1orlist[i]=="this"or\list[i]=="not"orlist[i]=="this"\orlist[i]=="how"orlist[i]=="这是"\还是list[i]=="或":list.remove(list[i])#print(list)myText="".join(list)print(myText)#制作词云wordcloud(background_color="white",font_path="simsun.ttf",height=300,width=400).generate(myText)#图片展示plt.imshow(wordcloud)plt.axis("off")plt.show()#导出词云图到当前文件夹word这里cloud.to_file("wordCloudMo.png")可能遇到的问题是,下载外部库wordcloud时可能会遇到各种花哨的错误。如何解决?看下面师兄方法:https://blog.csdn.net/qq_4281...词云图结果如下:从词云图中我们可以看到“real”,“children”,“颜良”、“噗噗”、“演技”等词频频出现,“真实”、“演技”、“强大”等词是大家对这部剧的肯定;“孩子”指的是三位主演的孩子;“扑扑”的演技真不错,大家猜测她会不会成为下一个张子枫。版权归原作者所有,如有侵权,请联系删除。在学习Python的道路上,你一定会遇到困难,别慌,我这里有一套学习资料,包括40+e-书籍,800+教学视频,涉及Python基础、爬虫、框架、数据分析、机器学习等c.不要害怕你学不会!https://shimo.im/docs/JWCghr8...《Python学习资料》关注公众号【蟒圈】,每日优质文章推送。
