:::
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/12/6 15:00
# @Author : huni
# @File : 爬取69岁老同志弹幕.py
# @Software: PyCharm
import requests
from lxml import etree
import re
import time
if __name__ == '__main__':
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36'
}
# 获取xml文件
url = 'https://www.bilibili.com/video/BV1HJ411L7DP?from=search&seid=14516722567641562415'
response = requests.get(url=url,headers=headers).text
cid = re.search(r'"cid":(\d*),', response).group(1)
comment = f'https://comment.bilibili.com/{cid}.xml'
comment_page = requests.get(url=comment,headers=headers)
# 处理中文乱码问题
page_text = comment_page.text.encode('ISO-8859-1').decode('utf-8')
with open('./danmu.xml','w',encoding='utf-8') as fp:
fp.write(page_text)
# 使用lxml解析xml文件
parser = etree.HTMLParser(encoding="utf-8")
tree = etree.parse("danmu.xml", parser=parser)
d = tree.xpath('//d')
a = []
for i in d:
timestamp = int(i.xpath('./@p')[0].split(',')[4])
timevideo = float(i.xpath('./@p')[0].split(',')[0])
danmutext = i.xpath('./text()')[0]
# 时间戳转换成时间格式
time_local = time.localtime(timestamp)
# 转换成新的时间格式(2016-05-05 20:28:54)
dt = time.strftime("%Y-%m-%d %H:%M:%S", time_local)
# 将视频时间多少秒转成时间格式
m, s = divmod(timevideo, 60)
h, m = divmod(m, 60)
tv = "%d:%02d:%02d" % (h, m, s)
a.append(danmutext)
# print(dt,tv,danmutext)
print(a)
词云:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/12/6 16:12
# @Author : huni
# @File : 词云测试.py
# @Software: PyCharm
import jieba #分词
from matplotlib import pyplot as plt #绘图,数据可视化
from wordcloud import WordCloud #词云
from PIL import Image #图片处理
import numpy as np #矩阵运算
import sqlite3 #数据库
# #准备词云所需的文字(词)
# con = sqlite3.connect('大学排名.db')
# cur = con.cursor()
# sql = 'select cname from rankings'
# data = cur.execute(sql)
# text = ""
# for item in data:
# text = text + item[0]
# #print(item[0])
# #print(text)
# cur.close()
# con.close()
text = ''.join(
['..................................................', '..', 'xswl', '螈賚冟穝觍', '这波操作啊好逼我三连啊', '缓存了就是好', '。', '幸好下载了', '很快啊', '芜湖!', '111', '很快啊', '哈哈哈哈哈缓存了', '魏子祺别学了', '不要搞被窝里斗', '‘’‘', '??这什么阴间弹幕', '还好缓存了()', '很快啊', '很快啊', '保护', 'hh', '哈哈哈', '战术严肃', '非物质文化遗产', '3000W 冲鸭', '嗷', '耗子尾汁', '3000w助攻', '我大E了沒有閃', '很快啊', '没有闪', '不打了', '强行解释', '笑一下', 'pa', '基本套路', '点到为止', '蜜汁微笑', '折不动……', '泪目……', '守护保国', '耗子尾汁', '全文背诵', '吭', '经典老番', '啊这', '还能发弹幕?', '嘿嘿', '我大意了啊,闪cd', '我大意了啊,闪cd', '闪cd', '后生', '非遗', '耗子尾汁', '哈哈', '梦开始的地方', '《吭》', '耗子喂汁', '过 气 网 红', '过 气 网 红', '过 气 网 红', '凄凄切切', '《对不起》', '《蹭了一下》', '文言字幕好!!!', '《二百多进的英国大理石》', '混元功法', '看来是', '哈哈哈哈哈', '哈哈哈', '规矩', '续联优速', '橙色弹幕好评', 'mid flash 6.39', '发生肾么事了', '耗子尾汁', '高数考试求保佑', '哦吼', '弹幕留念', '殴打', '耗子尾汁', '不讲武德', '就好了', '哈哈哈', '红红火火恍恍惚惚', '他乱发的', '很快啊', '踏马说', '马老师谢谢你', '缓存快乐', 'a\u2006a\u2006a\u2006q', '点到为止', '点到为止', '颐和违规', 'あなたは今', '吭', '下 架 前 的 签 到', '八国联军字幕组', '3000万助力', '下面让暖水壶同志说几句', '蹭了一下', ' 设 问 句 ', '对', '设 问 句', '英国大理石', '..', '输了武艺,赢了武德', '有备而来', '12月6号上午打卡,守护保国', '耗子尾汁', '吭', '我大E了啊,没有闪', '文化遗产', '婷婷', 'E', '设问句', '封前保存', '马老师发生甚么事了?', '王乾睿别冲了', '死劲', '漏网之鱼', '非 物 质 文 化 遗 产', '镇站之宝', '绝版', '大理石', '塔姆', '等等', '婷婷', '鸪遮 ', '婴国大力士', '塔门说', '吭', '色 狼 啵 千 金', '偷袭', 'rrr', '《老碰瓷》', '《铮铮》', '《婷婷》', '嗯', '2333333', '2333333', '偷袭', '马老师', '婷婷', '来偷袭', '我大e了啊', '很快啊', '哈哈', '漏网之鱼', '哈哈哈哈哈', '不好用', '文艺复兴', '灯', '快写一首情歌雅俗共赏', '我已经开始笑了', '收藏', '快缓存', '缓存了哈哈哈哈哈哈嗝', '徒手斗田芳', '目测估计法', '12.6 2918.3w', '赶紧下载', '留念', '看到是马老师“啪”一下就点进来了,很快啊!', '原来是佐天', '呵呵呵', '最 低 生 活 保 障', '非 物 质 文 化 遗 产', '幸好缓存了', '还好收藏了', '最后的净土', '漏网之鱼', '啊', 'NB', '???', '箍哲了', '还能发弹幕?', '春晚没你不看', '绝版资源', '搜保国,播放量最多还能搜到', '合影', '耗 子 尾 汁', '发生肾么事了', '我去 哈哈哈哈哈', '发生肾么事了', '发生肾么事了', '发生肾么事了', '发生肾么事了?', '2917.3w', '2917 w', '他说他捕腹鳍', '他说他不富气', '来自大佐的赞同', '这比最近谭警官的视频开胃多了', '耗子尾汁', '马老师好', '老童痔', '肾么事', '唉', '婷婷款内衣', '233333', '12.6缓存打卡', '马老师也不是乱说的', '66', '三件套', '懂王', '《婷婷》', '塔们说', '训练有so', '吭', '准备收钱可可还行╮( ̄▽ ̄)╭', '6', '经典咏流传', '我去!', '保护保护保护', '缓存了', '还好提前缓存了', '我', '珍贵历史影像', '今天是12月5号', '12月5日报告', '?', '《老同志》', '还好缓存了', '经典', '我去', '六', '年轻人不讲武德', '哈哈哈哈', '谢谢马老师', '窝里斗', '金哥学会了', '不要搞,我滴洞', '耗子尾汁', '防出去了啊', '这不好', '这好吗', '有bear来', '婷婷', '蹭了一下', '全文背诵', '我大意了啊,没有闪', '点到为止', '很快啊', '经典语录chuan', '色狼啵千金', '12.5', '婷婷', 'hhhhh', '绝版复习', '终于找到了', '保护', 'British CaCO3', '不服气', '马老师发生甚么事了', '蛋没关系啊', '塔不知道', ' 。', '经典', '老马识途', '我去!', '要求全文背诵', '幸好缓存了', '骗', '哈哈哈哈', '这个笑容由我来守护', '奈斯', '留个弹幕', '永垂不朽', '句句经典', '句句都是经典啊', '浑元老祖好', '因该会突破三千万', '这弹幕,就离谱doge', '老精!', '劳津', '弋鬈乆魃褟蔽秭達蠱鹧樂', '经典永流传', '每天亿遍', '啊这', '劲缀恋徊了', '6', '2916.4万', '耗子为汁', '朋友们好啊', '无了啊', '哈哈哈哈哈', '塔姆说', '塔姆说', '保护', '。', '3000w助攻', '我是孙琦 77', '我爱你', '马老师', '哈哈哈哈哈哈哈哈哈', '你好', '耗子尾汁', '刘明', '哈哈哈哈哈哈哈哈哈哈哈哈哈哈或哈哈哈哈哈哈哈哈哈哈哈哈哈', '吭', '鳎目', '我已经离线保存了', '英国大理石', '塔们说', '化劲', '色狼啵千金', '3000助力啊', '且行且珍惜', '每日一遍,防止抑郁', '3000万助功', '四两拨千斤', 'cso', 't', 'e', '骗', '老桶痔', '哈哈哈', '离 谱', '经典永流传', '有备而来', '珍贵历史录像', '漏网之鱼', '缓存了的', '缓存使我快乐', '给我演啊', '有Bear来', '好q', '骨折', 'scsazcsa', '嚯哈哈哈哈哈', '很快啊', '缓存了', '芜湖', '我自己一定', '背', '11', '吭', '这两个年轻人不讲武德', '左正蹬,右鞭腿,左刺拳', '化劲', '练死劲,不好用', '经典', '布达拉', '缓存了哈哈哈', '缓存了', '耗子尾汁', '有beer来', '防蛐蛐了呀', '劝你耗子尾汁', '偷袭!', '耗子尾汁', '我大E了', '哈哈哈,缓存了真好', '溢醛鸠灞沓魓淄龘毂褶鳓', '这不好', '我全部放蛐蛐了啊', '沓焖硕', '灯灯', '哈哈哈哈哈哈哈哈', '登登', '下边有请暖水壶演讲', '现在被限制了吗', '还好缓存了', ',,,', '牛', '前来朝圣', '《耗子喂汁》', '《老童纸》', '来,骗!来,偷袭!', '《不讲武德》', '有bear而来', '噔 噔鞭腿,左刺拳', '卧槽怎么绝版了我淦 幸好缓存得早', '《婷婷》', '我大E了啊,没有闪', '我啸一下,准备收钱', '《小朋友》', '塔姆说', '昨天', '非物质文化遗产', '登登', '高级弹幕都没了', '有bear来', '合影', '已经下架了还好提前缓存了', '我还能看!!!', '12.05', '马老师再见', '哈哈哈哈哈哈', '保国暖瓶', '前来考古', '耗子尾汁', '我唰的一下就下载下来了,很快啊', '哈哈哈哈哈哈哈哈哈哈哈哈', '哈哈哈', '哈哈', '弹幕留念', '缓存了', '耗子尾汁', '有备而来', '来 骗', '怎么回事', '我大E了啊', '阴间弹幕', '熠鬈鬏巼褟敝髭鐽菰嚞鰳', '哎哎哎哎啊', '婷婷', '中华文化瑰宝', '马老师好', '这好吗这不好是灵魂啊', '嬉皮笑脸', '老同志', '。', '浑元老祖驾到', '坑', '设么事了', '英国大理石', '耗子尾汁', '我啸一下', '缓存了', 'woc这么大', '我大E了啊,没有闪', '我大E了啊,没有闪', '混 浑', '哈哈哈哈哈哈哈', '窝里斗', '我大意了啊没有闪', '再来一遍', '婷婷', '下载了', '我大E了,我没闪', '皮热饿梨', '再看n遍。', '婷婷', '哈哈哈哈哈哈', '关', '哈哈哈', '有一个硕士', '哈哈哈哈哈哈', '耗子尾汁', '婷婷', '塔姆说', '他们说', '还好老子下载了', '这好吗,这不好', '2分多钟以后', '.', '接化发接化发', '耗子尾汁', '这两个年轻人不讲武德', '小伙子你不讲舞的', '我大E了啊,没有闪', '3000冲', '不讲武德', '哈哈哈哈哈哈哈哈哈哈哈哈哈哈好好好好好好好活儿', '哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈好好好好好好好好好好好好好好活儿', '每天一遍,去除烦恼,更开心', '有bear来', '小伙子,你不讲武德', '我大E了啊,没有闪', '三千万合影', '牛逼', '我 孝 一 下', '老三样', '很快啊', '英国大理石', '婷婷', '非物', '哦', '哈哈', '点到为止', '可以', '缓存把', '哈哈哈哈', '王乾睿别学了', '漏网之鱼', '视频还在吗', '哈哈', '耗子尾汁', '试试就试试', '非物质文化遗产', '耗子尾汁', '下载了', '还好我缓存了', '我是马老师的小内衣', '且看且珍惜', '巴巴爸爸', '小聪明啊!', '耗子尾汁', '不讲武德', '老三样', '来骗来偷袭', '原来是佐田', '我先打到他面部 他打肿我的眼', '快三千万了wc', '我是纪浩文我要当校长', '我是纪浩文,我要当校长', '我是纪浩文', '我是纪浩文', '我是纪浩文', '纪浩文我爱你', '能', '有bear来', '登登', '皮', '我去!!!', '老童子,这好吗', '个哦绿茶', '太不讲武德了', '收钱可还行', '啪就。起来了,很快,很快!', '还好缓存了', '大意了啊', '我去~', '老三样', '2912.3万', '哈哈哈', '每日亿遍', '耗子尾汁', '每天一遍,快乐无限', '色狼波千金', '好自为之', '耗子尾汁耗子尾汁耗子尾汁耗子尾汁耗子尾汁耗子尾汁耗子尾汁耗子尾汁耗子尾汁耗子尾汁耗子尾汁耗子尾汁耗子尾汁', '《噔噔》', '小伙子你不讲武德', '《婷婷》', '我大e了哈,没有闪', '我这个有用', '笑了', '不好用', '666', '千 古 绝 唱', '偷袭', '大E了', '看到马老师我啪的一下就点进来了,好快啊', '.', '耗子尾汁', '我去', '四两拔千斤', '他不服气', '原来是昨天', '哈哈', '快下载!!', '哇。', '马老师', '传统功夫是讲化劲的', '世界文明遗产', '名场面', '耗子尾汁', '不讲伍德', '英国大理石', '我说我这个有用', '前面刷名字的多少有点毛病', '哈', '《懂》', '哈哈哈', '好', '还好缓存了', '猿濑氏佐田', '哈哈', '婷婷', '●1.12', '耗子尾汁', '哈哈哈', 'hhh', '很快啊', '我大E了啊,没有闪', '马老师好', 'how’s the weather', '封了还可以发弹幕', '还能发弹幕吗', '反复强调', '有贝尔来', '婷婷在中大', '我笑一下', '塔姆说', '好快啊', '全文背诵', '要讲would', '快三千万播放量', '画面感超强', '非物质文化遗产保护项目', '我去,大佬合影留念', '笑死我了', '就很淦', '咳', '帮助治疗一下', '每天两遍防抑郁', '婷婷', '很快啊', '合影留念,朋友们缓存啊', '每日一遍,神清气爽', '每天一遍,神清气爽', 'spuermind', '他输了', '耗子尾汁', '有备而来', '我的婷婷', '原来是佐田', '缓存了', '我缓存了哈哈哈', '留影纪念!', '《再也回不来了》', '哈哈哈', '精神食粮 ', '黎涡!好可爱', '搜“保国”,再点播放多', '哎', '坐等3000w', '有备而来', '䳲䪁䥘', '6.9岁', '鳎吗', '保护', '我一看,哦!原来是马老师视频被封了!', '耗子尾汁', '很快啊', '啊这', ',', '保护', '?让人', '一个体重80多公斤', '源赖是昨天', '太极图呢???', '斗', '。', '战术水壶', '《窝里斗》', '这弹幕笑死', '治疗一下我的精神病', '治疗一下我的精神病', '哈哈哈。', '打鸪鹧了', '老 三 样', '开头见', '千古流传', '谢谢朋友们', '我弟洞', '一盒未归', '小聪明,啊', '耗子尾汁', '老童汁', '偷吸', '有bear来', '他可不是乱打的啊', '对不起对不起', '《蹭了一下》', '大e', '我大E了啊没有闪', '耗子尾汁', '希望大家缓存了', '偷西', '离谱', '输了', '《点到为止》', '源濑氏•佐田', '很快啊', '全部防区', '很快啊', '英国大理石', '耗子尾汁', '幸好下了', '还好缓存了', '害怕 各位还能看见我的弹幕吗 今天12.4', '缓存了', '我缓存了', '缓存nb哈哈哈哈', '还好缓存了', '伊核为贵', '马老师脸上带着笑意', '点到为止', '塔们说', '哈哈哈哈哈哈哈哈哈哈哈', '武德警告……', '记住一个要考的这个', '保护', '有贝尔来', '我大E了 没有闪', '窝里斗……', '一脸严肃', '有备而来', '嘤国大理石', '色狼啵千金', '非物质文化遗产', '经 典 老 番', '额', '上头了上头了', '\\', '耗子尾汁', '颐 和 为 贵', '有baer来', '《耗子尾汁》', '耗子为之', '哈哈', '有贝尔来', '鼠尾胶原蛋白', 'NB', '丑', '非物质文化遗产', '哈哈哈', '我去', '獭夜说', '乙醛酒拔獭婢子哒孤遮嘞', '我笑一下,准备收钱', '防蛐蛐了啊', '哈哈', '吭', '塔闷说', '布达拉', '很快啊', '每日亿遍', '哈哈哈哈哈', '3000万', '非物质文化遗产', '哈哈哈哈哈哈哈哈哈红红火火恍恍惚惚', '色狼啵千金笑死我了哈哈哈哈哈哈哈', '文艺复兴', '耗子尾汁', '1', '每日按时打卡', '每天亿遍快乐无限', '別学了,李珈霖 別学了,李珈霖', '別学了,李珈霖 別学了,李珈霖 別学了,李珈霖', '有备而来', '阿弥陀佛', '全文背诵', '闥斖鑠', '为什么我没下载还可以看', '左田', '高级弹幕嘞', 'nbn', 'nb', 'nn', '哈哈哈哈哈哈哈', '每天一遍', '绝版咯', '阿巴阿巴', '非物质文化遗产', '他们说', '2908', '我滴洞', '哈哈', '哈哈哈', '哈哈哈', '法身什么事了', '。。。。', '婷婷', '我大E了啊', '千古流传', '我也缓存了。', '马老师发生什么事了', '啦啦啦', '厉害', '欢 迎 回 来', '哈哈哈哈哈', '绝版视频', '哈哈哈哈哈', '保护最好的马老师!!!', '好之为之', '我大意了,没有伞', '很快啊', '自己把自己都骗了', '耗子尾汁', '漏网之鱼', '我大E了没有缓存', '打鸪鹧', '每天一遍,防止抑郁', '佐 天 泪 子', '耗子尾汁', '率先下载', '尊荣那里来的', '马老师', '懿權舊粑塌筆秭龘顧辄簕', '⊙', '合影', '下载了', '很快啊', '很快啊', '漏网之鱼', '温故知新', '哈哈哈', '留个弹幕!', '哈哈哈哈哈哈哈哈', '你这样没有', '我是塔们数学课掌门人张哲', '哈哈哈哈哈哈哈哈哈', '我又来了!', '马老师发生肾摸事了', '鼋鶆埘靻嚄鷈媕', '塔姆说', '终于又找到了', '经 典 老 番', '天天看缓存', '竟然还在', '漏网之鱼', '还好下载了', '缓存', '马老师发生什么事了', '骗', '等等', '婷婷', '打骨折了', '还能发弹幕,哈哈哈', '口技表演', '保护个锤子', '爷青回', '口技', '年轻人~', '还好收藏了', '哈哈哈没了', '婷婷来了', 'ʕ๑•ɷ•๑ʔ❀', '不要搞~我滴洞', '阴间视频', '哈哈', '缓存', '一两就够了', '很快啊', '还好收藏了', '老三样', '我大E了,没有闪', '低调', '我说', '每日一边', '传世经典', '老师好', '守护这笑容', '色狼啵千金', '发生肾磨事了', '合照', '噔噔 鞭腿 左刺拳', '防蛐蛐了啊', 'hin快哈', '哈哈哈哈哈哈哈哈哈哈哈', '来骗来偷袭', '有', '已经绝版了', '全文背诵', '哈哈哈', '来骗赵高阳', '赵高阳前来报到', '赵高阳牛逼', '赵高阳牛逼', '赵高阳牛逼', '海王', '6666', '现在只能马大师,保国之类的了', '666', '哈哈哈', '绿色走一波', '漏网之鱼', '原来是左天', '重温经典', '》', '666', '婷婷。', '耗 子 尾 汁', '欧阳嘉琪', '得亏缓存了', '12月4日中午打卡,一天不看浑身难受', '赶快缓存', '小聪明', '字 字 珠 玑', '朋友们号,这是绝版了', '?', '把', '双押 好家伙', '我 啸 亿 下 准 备 收 钱', '小 鹏 友', '小鹏友', '哈哈哈', '婷婷', '朋友们好', '看来是有备而来', '婷婷', '蜜汁剧情', '我说婷婷', '谢谢马老师', '????????????????????????????????????????', '布达拉', '很快啊', '都握不动我这一个手指头 啊!', '哈喽', '我先打到他面部', '耗子尾汁警告', '666', '哈哈哈', '芜湖', '哈哈哈', '哈哈', '保护', '我怎么找不到缓存键?', '保护', '布达拉', '鼻子骨折', '吭', '透析', '打姑浙', 'nbnb', '绝版以前签到', '早封了,幸亏我缓存的早', '我去', '来,骗!来,偷袭!', '搜索武德再筛选最多播放量就可以看马老师了', '还差95万', '3000万助力啊', '3000万助力加油啊', '?', '我说可一', '药一喝喂龟', '这必须来看看', '哈哈下载了', '绝版', '每天一遍,抑郁再见', '可以', '再来亿遍', '《耗子尾汁》', '有bear来', '《不讲武德》', '66666', '窝里斗', '耗子尾汁', '这不好', '有备而来', '他可不是乱打的', '还没下架呢', '哈哈哈哈哈哈哈哈哈。', '踩尸', '以后在b站看视频第一时间下载', '我是火云邪神太极门', '保护', '年轻人,不讲武德', '合影留念很快啊', 'カ', '我说小朋友', '考古', '针不戳', '贡献弹幕', '哈哈操', '折腾', '原来还有', '耗子尾汁', '郑国富你不讲武德还在看', '每日一遍', '保护', '婷婷', '笑死我了', '牛逼啊', '且看且珍惜。', '咋缓存啊', '阴间弹幕', '为什么要保存', '《碘豆煨汁》', '打蛊蛰了', '-+', '非物质文化遗产', '耗子尾Hi', '这弹幕咋打出来的', '哈哈哈哈哈哈哈哈', '哈哈哈哈', '还好缓存了', '非物质文化遗产', '还好我收藏了', '好', '我大意了', '音容宛在,永垂不朽', '哈哈哈哈', '色狼啵千金', '非物质文化遗产', '挑起事端', '生活必需品', '绝版了', '同学们,今天讲的《耗子尾汁》这篇文章要求背会,明天早读老师检查。希望同学们耗子尾汁,不要偷懒,老师刚学的闪电五连鞭可不是盖的', '69岁头发还是黑的吗', '我大E了啊,没有闪', '镒醛鬏颰獺閉龇龖顧磔簕', '我太了啊', 'can you tell me supermind help me to Q my neck', '啊', '哈哈哈', '窝里斗', '耗子尾汁,好好反思', '69岁的老同志', '强行解释', '大理石', '耗子尾汁↓', '文化遗产', '生 活 必 需 品', '留念', '这种高级视频肯定有高级弹幕啊', '哈哈哈', '怎么肥事', '哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈', '小', '幸好我也缓存了', '你有点马宝国', '看哭了,爷的青春', '合影'])
#分词
cut = jieba.cut(text)
string = ' '.join(cut)
print(len(string))
img = Image.open(r'C:\Users\mini\Desktop\unnamed.png') #打开遮罩图片
img_array = np.array(img) #将图片转换为数组
wc = WordCloud(
background_color='white',
mask=img_array,
font_path="simfang.ttf" #字体所在位置:C:\Windows\Fonts
)
wc.generate_from_text(string)
#绘制图片
fig = plt.figure(1)
plt.imshow(wc)
plt.axis('off') #是否显示坐标轴
plt.show() #显示生成的词云图片
#输出词云图片到文件
#plt.savefig(r'.\static\assets\img\word.jpg',dpi=500)
总代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/12/6 15:00
# @Author : huni
# @File : 爬取69岁老同志弹幕.py
# @Software: PyCharm
import requests
from lxml import etree
import re
import time
import jieba #分词
from matplotlib import pyplot as plt #绘图,数据可视化
from wordcloud import WordCloud #词云
from PIL import Image #图片处理
import numpy as np #矩阵运算
if __name__ == '__main__':
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36'
}
# 获取xml文件
url = 'https://www.bilibili.com/video/BV1HJ411L7DP?from=search&seid=14516722567641562415'
response = requests.get(url=url,headers=headers).text
cid = re.search(r'"cid":(\d*),', response).group(1)
comment = f'https://comment.bilibili.com/{cid}.xml'
comment_page = requests.get(url=comment,headers=headers)
# 处理中文乱码问题
page_text = comment_page.text.encode('ISO-8859-1').decode('utf-8')
with open('./danmu.xml','w',encoding='utf-8') as fp:
fp.write(page_text)
# 使用lxml解析xml文件
parser = etree.HTMLParser(encoding="utf-8")
tree = etree.parse("danmu.xml", parser=parser)
d = tree.xpath('//d')
a = []
for i in d:
timestamp = int(i.xpath('./@p')[0].split(',')[4])
timevideo = float(i.xpath('./@p')[0].split(',')[0])
danmutext = i.xpath('./text()')[0]
# 时间戳转换成时间格式
time_local = time.localtime(timestamp)
# 转换成新的时间格式(2016-05-05 20:28:54)
dt = time.strftime("%Y-%m-%d %H:%M:%S", time_local)
# 将视频时间多少秒转成时间格式
m, s = divmod(timevideo, 60)
h, m = divmod(m, 60)
tv = "%d:%02d:%02d" % (h, m, s)
a.append(danmutext)
# print(dt,tv,danmutext)
# 获取词云所需词语
text = ''.join(a)
# 分词
cut = jieba.cut(text)
string = ' '.join(cut)
print(len(string))
img = Image.open(r'C:\Users\mini\Desktop\unnamed.png') # 打开遮罩图片
img_array = np.array(img) # 将图片转换为数组
wc = WordCloud(
background_color='black',
mask=img_array,
font_path="simfang.ttf", # 字体所在位置:C:\Windows\Fonts
max_font_size = 100,
min_font_size = 10,
max_words=8000,
)
wc.generate_from_text(string)
# 绘制图片
fig = plt.figure(1)
plt.imshow(wc)
plt.axis('off') # 是否显示坐标轴
plt.show() # 显示生成的词云图片
# 输出词云图片到文件
# plt.savefig(r'.\static\assets\img\word.jpg',dpi=500)