周杰伦的新歌,看看网友们都说了些什么吧

周杰伦的新歌mojito,看看网友都说了些什么吧


之前因为要参加一些考试和我公司的一些原因,停更了一段时间。现在基本上回归了正常的生活,就没有之前那么的忙碌了。回来想想已经有半个月的时间没有写过文章了,内心还是有一点小小的遗憾的。所以今天就把文章写完它。

听说在我考试的前一晚周杰伦就发了最新的单曲《Mojito》,我去看了一下销售数据,居然不到一个小时,就有超过1百万。所以今天我就来爬一下这首歌在B站的弹幕看看网友们都说了什么吧。
在这里插入图片描述

从上图可以看出这首歌很具有异域风情啊。好了,回到我们的主题。其实在写这篇文章之前我也看过很多博主都写过这篇文章,我为什么还要写,这不是有抄袭的嫌疑吗?所以我在这边就打算用2种方法来获取数据。

1、网站分析

B站的变化很快,之前还是可以找到弹幕的接口数据,但是现在已经找不到了。但是找到了目录页的接口,因为以前也爬过B站的弹幕,所以赶紧回去翻了一下之前写的代码。发现目录接口是:https://comment.bilibili.com/xxx.xml

在不同的视频有不同的值,所以在这里我就用XXX代替了。

alt

在上图就是我找到的目录的id,每一个视频都有单独的cid。

那么弹幕的接口数据也就出来了

https://comment.bilibili.com/201056987.xml

alt

那么弹幕的接口数据都找到了,那就开始写代码吧。

从上图可以看到,在p标签中有8组数据,着这8组数据分别代表什么呢?

第一个参数是弹幕出现的时间 以秒数为单位。
第二个参数是弹幕的模式1…3 滚动弹幕 4底端弹幕 5顶端弹幕 6.逆向弹幕 7精准定位 8高级弹幕
第三个参数是字号, 12非常小,16特小,18小,25中,36大,45很大,64特别大
第四个参数是字体的颜色 以HTML颜色的十位数为准
第五个参数是Unix格式的时间戳。基准时间为 1970-1-1 08:00:00
第六个参数是弹幕池 0普通池 1字幕池 2特殊池 【目前特殊池为高级弹幕专用】
第七个参数是发送者的ID,用于“屏蔽此弹幕的发送者”功能
第八个参数是弹幕在弹幕数据库中rowID 用于“历史弹幕”功能。

如果我么需要这八个参数和弹幕的话,那么总共就是9个数据。因为弹幕的数据量很小,所以这里选择保存到csv文件里面。

先来教大家用bs4获取弹幕数据

2、bs4获取弹幕

from bs4 import BeautifulSoup
import requests
import pandas as pd


headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36'
}
def get_html(url):
    html = requests.get(url, headers=headers).content.decode('utf-8')
    return html

def parse_data(html):
    soup = BeautifulSoup(html,'lxml')
    result = soup.findAll('d')  # 返回一个列表
    # print(result)
    danmu = []
    for comment in result:
        danmu.append(comment.text)
    comment_dict = {
        '弹幕': danmu
    }
    # print(comment_dict)
    return comment_dict


def save_data(data):
    df = pd.DataFrame(data)
    df.to_csv('Mojito1.csv',mode='w', encoding='utf-8-sig')

def main():
    url = 'https://comment.bilibili.com/201056987.xml'
    html = get_html(url)
    data = parse_data(html)
    save_data(data)



if __name__ == '__main__':
    main()

结果如下图所示:

alt

从上图你会发现,csv文件默认会有一个行索引,如果你不想看到也可以将它去掉。

df.to_csv('Mojito1.csv',mode='w', encoding='utf-8-sig', index=False)	# 清除索引

结果如下图所示:

alt

上述内容就是通过bs4来获取弹幕信息的方法

3、通过正则表达式获取所有信息

如果要获取所有的信息的话,首选正则表达式。

import requests
import pandas as pd
import re

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36'
}


def get_html(url):
    html = requests.get(url, headers=headers).content.decode('utf-8')
    return html


def parse_html(html):
    pattern = '<d p="(.*?),(.*?),(.*?),(.*?),(.*?),(.*?),(.*?),(.*?)">(.*?)</d>'	# 返回列表
    result = re.findall(pattern, html)
    data = pd.DataFrame(result, columns=['弹幕出现时间', '弹幕模式', '字号', '字体颜色', '时间戳', '弹幕池', '发送者id', '历史弹幕', '弹幕'])
    return data


def save_data(data):
    data.to_csv('Mojito.csv', encoding='utf-8-sig',index=False)


def main():
    url = 'https://comment.bilibili.com/201056987.xml'
    html = get_html(url)
    data = parse_html(html)
    save_data(data)




if __name__ == '__main__':
    main()

结果如下图所示:

alt

上述所讲的内容就是通过正则表达式获取到的

4、制作词云图

很多的小伙伴会问怎么样制作任意形状的词云,那么我今天就教大家简单的办法。

看似很漂亮的东西,做出来就不难了

首先下载一张轮廓图,最好时有阴影的。

alt

这张图我将它命名为ss1.jpg

from wordcloud import WordCloud
import jieba
from imageio import imread


back_picture = imread('ss1.jpg')    # 读取图片背景
file = open('danmu.txt','r',encoding='utf-8')
content = file.read()
words = jieba.lcut(content)
txt = ' '.join(words)
wordcloud = WordCloud(
    background_color='white',
    max_words=2000,
    max_font_size=200,
    mask=back_picture,  # 遮罩
    random_state=40,
    font_path=r'C:\Windows\Fonts\STFANGSO.ttf',
    scale=10    # 设置分辨率
).generate(txt)

wordcloud.to_file('mojito.png')

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9rLaK4bh-1592397289032)(https://s1.ax1x.com/2020/06/17/NEGZWQ.png)]

至此,所有内容全部弄好。不知道大家有没有学习到啊。

从词云图中可以看出,啊啊啊周杰伦等词汇是出现最多的,看来这首歌让很多网友都很激动,只能用感叹词来表达自己内心的情感。

问题咨询

如果大家在阅读本文章的时候出现了什么问题无法解决的话可以在下方留言,也可以天添加我个人的微信。

alt

代码获取

如果有小伙伴在看文章的时候有哪些地方突然打了断点,大家可以关注我个人的公众号,在公众号上你也可以看到很多往期的文章。在公众号回复:Mojito

即可获取源码

alt

视频教程

本次视频已经上传到了B站,点击视频链接即可观看
视频教程

致谢

好了,又到了和大家说再见的时候了,希望我的文章可以给你带来知识,带来帮助。同时也感谢你能够抽出宝贵的时间来阅读。创作不易,如果你喜欢就点个关注再走吧。更多的精彩内容会在后续继续更新,你的支出就是我创作的动力。今后会继续推出更加优质的文章。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值