Python爬虫教程,采集bilibili弹幕并生成词云

Python爬取bilibili弹幕并生成词云目标网站:我这里以 TES vs SN 第四场决胜局为例:私信小编01即可获取大量Python学习资料
探索经历:【Python爬虫教程,采集bilibili弹幕并生成词云】首先我们要找到我们想要爬取的弹幕都发在哪:我们先播放这个视频 , 随便记住一条弹幕 , 到审查元素里面搜索
Python爬虫教程,采集bilibili弹幕并生成词云文章插图
哎 , 可以找到 , 然后我们再查看一下网页的源代码 , 没有搜索结果 。。。。。。 这说明bilibili的弹幕是动态加载的 , 是js请求的数据 , 可能是json , 也可能是XML
通常我们都会通过翻页等操作让网页进行js请求 , 我们在“后台”盯着 , 看有没有多出来的文件 , 依次翻看一下里面的东西 , 看看有没有存放弹幕的文件 , 于是我继续播放视频 , 列表里也确实多了很多文件
Python爬虫教程,采集bilibili弹幕并生成词云文章插图
但很可惜并没有找到我想要的存储弹幕的文件
我觉得播放视频还是没能请求到弹幕文件 , 于是我找到了第二种方法:(需要先登陆一下)
Python爬虫教程,采集bilibili弹幕并生成词云文章插图
如图 , 切换不同的日期可以找到我们想要的存储弹幕文件 , 是个XML文件:
Python爬虫教程,采集bilibili弹幕并生成词云文章插图
这样 , 我们就找到了目标url , 复制url打开就是我们想要的弹幕页面
Python爬虫教程,采集bilibili弹幕并生成词云文章插图
同样 , 我们也找到了规律这里有两个可以更换的参数:(1)oid:这个就是视频的id(这个可不太好找)
Python爬虫教程,采集bilibili弹幕并生成词云文章插图
(2)date:这个很明显是日期
真正目标:传送门:;date2020-10-26
思路与方法:(1)这个XML文件也是标签语言 , 用BeautifulSoup可以轻松爬取 , 存储到本地txt文件中(2)利用jieba库对txt内容进行分词 , 再合并成一个空格分割的字符串(用于Wordcloud参数)(3)使用Wordcloud生成词云并保存到本地
部分细节讲解:弹幕标点符号和空格的去除: 这个是老生常谈了 , 我之前有一篇博客也说过:SimHei字体:
完整代码: import requestsimport reimport osfrom bs4 import BeautifulSoupimport jiebafrom wordcloud import WordClouddef getHTMLText(url):try:kv = {"user-agent":"Mozilla/5.0"}r = requests.get(url,headers = kv)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:print("getHTMLText失败!")return ""def fillbarrages(url,path_txt):html = getHTMLText(url)soup = BeautifulSoup(html,'html.parser')with open(path_txt,'a',encoding='utf-8') as f:for d in soup.find_all("d"):# 使用正则表达式去除空格和标点 , \W 表示匹配非数字字母下划线barrage = re.sub('\W+','',d.text)f.write(barrage)f.close()def getWordCloud(path_txt,path_jpg):barrages_cut = jieba.lcut(open(path_txt,'r',encoding='utf-8').read())#jieba分词barrages = " ".join(barrages_cut)#回拼成字符串并用空格分割wc= WordCloud(font_path=r"F:\Fonts\SimHei.ttf",background_color="skyblue",max_words=100,width=1080,height=720)wc.generate(barrages)wc.to_file(path_jpg)def main():url = ";date2020-10-26"path_txt = "TESvsSN第四场.txt"path_jpg = "TESvsSN第四场.jpg"fillbarrages(url,path_txt)print("fillbarrages成功")getWordCloud(path_txt,path_jpg)print("getwordcloud成功")main()词云展示:
Python爬虫教程,采集bilibili弹幕并生成词云文章插图