python爬取腾讯视频《斗罗大陆》弹幕并制作词云(WordCloud)

最近闲来无事,就用前段时间学习的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&timestamp={}'
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")   #生成图片

结果是:

然后我们会在对应的工程目录下看见

如果觉得有用,就多多收藏点赞吧!如果有问题可以在下方留言,看到了会回答的哦!

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值