最近闲来无事,就用前段时间学习的jieba分词和词云WordCloud,以及网上看的python爬虫爬取了《斗罗》最燃的107集弹幕,结合做了词云分析,从这个过程中确实学到了不少技术,下面就分别详细的介绍吧!
首先,前期准备:
1.pycharm2020.1.2版本,具体怎么激活到2089年看另外一篇文章
2.Google Chorme
下载完成并激活成功pycharm后,我们需要加入几个第三方库,如jieba,pandas,wordcloud,requests等等。那么我们怎么在pycharm中直接添加呢?打开pycharm->file->setting,找到你编写的工程文件,Project Interpreter,然后点击"+"号,搜索上面的第三方库即可安装,其中wordcloud可能会安装有点问题,因为差一个whl文件,具体怎么操作网上有教程,下载好对应的whl文件就可以手动进行安装了。如下图:
这些第三方库安装完毕我们就可以进行问题分析啦!
1.弹幕怎么获取呢?打开Google浏览器腾讯视频斗罗大陆107集,等正片开始,f12进入开发者选项,点击network,然后你会发现有很多的网络流,这些都是服务器发送的包,具体我们应该看哪个?这个时候我们猜测弹幕属于ajax,那么应该在js里面找,所以选中js,我们就发现了
这个就是我们要找的东西啦,点击左键,然后preview,就可以看到里面的弹幕信息了,如下图:
这个地方我们要注意,弹幕是实时的,因此这个弹幕只是“这一个瞬间”,我们可以称之为一页,那么这个页的时间是多大呢?我们再header里面找到了timestamp,
timestamp就是时间戳了,一集电视剧是从15开始,因此45是第三页,下一个弹幕我们发现timestamp是75,因此是按照30的间隔来更新弹幕,依次类推,那么一集电视剧最后是多少呢,这个得自己去找,拖动进度条,然后观察右边的弹幕js,我们发现就斗罗大陆107集来说,最后的一个片段的弹幕timesta是1245,也就是我们经历了41个这么多的页,才能放完(15+41*30)。接下来就获取弹幕啦,一旦我们获取了一个弹幕的信息,那么用for循环遍历所有页的信息也不是什么难事,下面介绍如何获取弹幕,首先我们找到每一个弹幕的URL地址(在header里面的Request URL中copy)代码如下:
base_url='https://mfm.video.qq.com/danmu? #这个是最开始“页”,其中timestamp={},表示之后会递增每一页 otype=json&callback=jQuery19103718146980062018_1593831246919&target_id=5355545898%26vid%3Dd0034b19k4y×tamp={}' newtext=[] #存content for num in range(15,41*30+15,30):#这个时候就是开始递增了,按照30的步骤递增 url=base_url.format(num) #不断的更新地址 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36'} #伪装报头 html = requests.get(url, headers=headers) bs = json.loads(html.text[html.text.find('{'):-1], strict=False) #这个是要获取一页弹幕的所有内容 df = pd.DataFrame() for i in bs['comments']: #每一个弹幕的内容包括:评论、评论的ID,时间,点赞数等等,都可以对应 content = i['content'] newtext.append(content) #这里我们用一个列表来存储 name = i['opername'] upcount = i['upcount'] user_degree = i['uservip_degree'] timepoint = i['timepoint'] comment_id = i['commentid'] cache = pd.DataFrame({'用户名': [name], '内容': [content], '会员等级': [user_degree], '评论时间点': [timepoint], '评论点赞': [upcount], '评论Id': [comment_id]}) df = pd.concat([df, cache])
接下来我们怎么把newtext的内容写进文本txt中呢,很简单,代码如下:
with open("douluo.txt","w",encoding="utf-8") as f: for i in newtext: f.write(i)
这样程序运行完,我们就可以发现,所有的内容都在douluo.txt这个文本中了,下面就是用jieba分词和wordcloud进行词云分析操作。相应的代码如下:
text=open('douluo.txt','r',encoding='utf-8').read() word_jieba=jieba.lcut(text) #jieba分割每一个词语 word_split=" ".join(word_jieba) #以空格为分隔符 from wordcloud import WordCloud import matplotlib.pyplot as plt wordcloud = WordCloud(background_color='white',collocations=False,font_path="msyh.ttc",\ width=1000, height=700, max_words=35,min_font_size=10,\ ) wordcloud.generate(word_split) #生成wordcloud plt.imshow(wordcloud) #下面三行可以不需要,这段代码的作用是程序运行完之后pycharm右边会实时显示我们输出的词云 plt.axis('off') plt.show() wordcloud.to_file("douluo.jpg") #生成图片
结果是:
然后我们会在对应的工程目录下看见
如果觉得有用,就多多收藏点赞吧!如果有问题可以在下方留言,看到了会回答的哦!