盘点一个哔哩哔哩弹幕抓取并词云可视化的项目

大家好,我是皮皮。

一、前言

前几天在Python白银交流群【肉丸胡辣汤】问了一个Python网络爬虫和可视化的问题,提问截图如下:

代码如下:

1#导入我们要用到的模块 2import requests 3import re 4import jieba 5import wordcloud 6import imageio 7#选择同一个文件夹下的luoxiang.jpg图片 8mask = imageio.imread('xing.jpg') 9 10#设置想要爬取的网页地址 11url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=177974677' 12#设置请求头,让爬虫伪装成浏览器访问 13headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'} 14 15def get_damu(url): 16 response = requests.get(url, headers) 17 response = response.content.decode('utf-8') 18 #通过正则表达式获取两个<d>标签内包含的弹幕信息 19 data = re.compile('<d.*?>(.*?)</d>') 20 #对目标网页使用正则表达式,获取所有匹配的内容 21 danmu = data.findall(response) 22 #使用jieba模块的lcut()精确模式进行分词,并用空格连接词语 23 danmu_word = jieba.lcut(" ".join(danmu)) 24 #将分词结果再次用空格连接,并转化成制作词云需要的字符串形式 25 danmu_str = " ".join(danmu_word) 26 #构造词云对象,字体为微软雅黑,背景颜色为白色 27 #设置宽度为1000高度为500,通过mask设置图片形状 28 w = wordcloud.WordCloud(font_path="msyh.ttc",background_color='white',width=1000,height=500,mask=mask) 29 #将处理好的分词弹幕加载到词云中 30 w.generate(danmu_str) 31 #将生成的词云保存为danmu.png图片 32 w.to_file('danmu.png') 33 34if __name__ == '__main__': 35 s = input("输入要爬取的弹幕地址:") 36 # 将用户输入的弹幕地址去掉空格并加载到get_danmu()37 get_damu(s.strip()) 38

这个代码是从其他文章上看到的,确实可以运行,只不过现在想换个视频的URL,对于新手来说,找起来可就没那么简单了。

之后在这里可以找到地址:

二、实现过程

这里【dcpeng】给了一份代码,修改后的代码如下:

1# 导入我们要用到的模块 2import requests 3import re 4import jieba 5import wordcloud 6import imageio 7 8# 选择同一个文件夹下的luoxiang.jpg图片 9mask = imageio.imread('Python进阶者.jpg') 10 11# 设置想要爬取的网页地址 12# url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=177974677' 13# 设置请求头,让爬虫伪装成浏览器访问 14headers = { 15 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'} 16 17def get_damu(url): 18 response = requests.get(url, headers) 19 response = response.content.decode('utf-8') 20 # 通过正则表达式获取两个<d>标签内包含的弹幕信息 21 data = re.compile('<d.*?>(.*?)</d>') 22 # 对目标网页使用正则表达式,获取所有匹配的内容 23 danmu = data.findall(response) 24 # 使用jieba模块的lcut()精确模式进行分词,并用空格连接词语 25 danmu_word = jieba.lcut(" ".join(danmu)) 26 # 将分词结果再次用空格连接,并转化成制作词云需要的字符串形式 27 danmu_str = " ".join(danmu_word) 28 # 构造词云对象,字体为微软雅黑,背景颜色为白色 29 # 设置宽度为1000高度为500,通过mask设置图片形状 30 w = wordcloud.WordCloud(font_path="simkai.ttf", background_color='white', width=1000, height=500, mask=mask) 31 # 将处理好的分词弹幕加载到词云中 32 w.generate(danmu_str) 33 # 将生成的词云保存为danmu.png图片 34 w.to_file('danmu.png') 35 36if __name__ == '__main__': 37 # s = input("输入要爬取的弹幕地址:") 38 url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=177974677' 39 # 将用户输入的弹幕地址去掉空格并加载到get_danmu()40 # get_damu(s.strip()) 41 get_damu(url) 42

运行之后可以得到预期的效果了。

如果需要其他的视频弹幕,找到对应的url,替换即可。

比分说下图的URL地址,找起来可能就没那么简单了,需要在抓包的XHR中认真的找。

自己找一天,不如群里几分钟。

这个抓取弹幕的代码还是蛮实用的,有需要的小伙伴可以收藏着,万一哪天用到了呢!

三、总结

大家好,我是皮皮。这篇文章主要盘点了一个Python网络爬虫和词云可视化的问题,文中针对该问题,并给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

最后感谢粉丝【肉丸胡辣汤】提问,感谢【dcpeng】、【此类生物】给出的思路和代码解析,感谢【甯同学】、【greenHandPyer】等人参与学习交流。

点赞
收藏

评论区

加载中...

相关推荐

根据uid进行分组后,然后组内,按照mon进行升序,怎么写语句呢?

大家好,我是皮皮。一、前言前几天在Python白银交流群【空翼】问了一个Pandas处理的问题,提问截图如下:!(https://uploadimages.jianshu.io/upload_images/26239789773

盘点一个Python列表(元素多样)处理的实战题目(使用正则表达式也可以实现)

大家好,我是Python进阶者。一、前言前几天在Python白银交流群【凡人不烦人】问了一个Python列表处理的问题,提问截图如下:!(https://uploadimages.jianshu.io/upload_images/

我想在一段文字中扣出关键字附近前后30个字,用正则怎么写?

大家好,我是Python进阶者。一、前言前几天在Python白银交流群【此类生物】问了一个Python数据提取的问题,提问截图如下:!(https://uploadimages.jianshu.io/upload_images/2

盘点一个Python网络爬虫+正则表达式处理案例

大家好,我是Python进阶者。一、前言前几天在Python白银交流群【鑫】问了一个Python网络爬虫的问题,提问截图如下:!(https://uploadimages.jianshu.io/upload_images/2623

怎么把这两行Python代码写成一行代码?

大家好,我是皮皮。一、前言前几天在Python最强王者交流群【刘苏秦】问了一个Python的问题,提问截图如下:!(https://uploadimages.jianshu.io/upload_images/26239789aee

anaconda虚拟环境下pip报这个错咋回事啊?

大家好,我是皮皮。一、前言前几天在Python白银交流群【喜靓仔】问了一个Python库安装的问题,提问截图如下:!(https://uploadimages.jianshu.io/upload_images/26239789a