py获取《灵笼》第一集的弹幕———绘制词云图

简介: py获取《灵笼》第一集的弹幕———绘制词云图

访问弹幕的接口

前人栽树,后人乘凉。使用已经分析过的url链接进行get请求即可

需要:

  • 视频cid
  • 视频的oid
1.https://comment.bilibili.com/视频cid参数.xml
2.https://api.bilibili.com/x/v1/dm/list.so?oid=视频iod

heart中的cid参数查找

《灵笼》的第一集的url:https://www.bilibili.com/bangumi/play/ss22088/?from=search&seid=17394404948182677638

打开弹幕,查看network不断清除刷新,发现heartbeat随着弹幕的出现而不断出现

heartbeat的headers和post form数据

requestUrl:https://api.bilibili.com/x/click-interface/web/heartbeat

使用aid的参数:129528808,访问xml链接即可得到灵笼第一集的弹幕

url:https://comment.bilibili.com/129528808.xml

ok,进行get请求和正则提取出字幕

import requests,re
def compile_font(text):
    c=re.compile(r'p="(.*?)">(.*?)<',re.S)
    result=re.findall(c,text)
    print(result)
def request_post(url):
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
        "origin": "https: // www.bilibili.com",
        "referer": "https://www.bilibili.com/bangumi/play/ss22088/?from=search&seid=17394404948182677638"
    }
    resp=requests.get(url,headers=headers)
    print(resp)
    text=resp.content.decode('utf-8')
    compile_font(text)
if __name__=='__main__':
    url="https://comment.bilibili.com/129528808.xml"
    request_post(url)

对弹幕和其发起者的id信息进行提取

点击查看历史弹幕oid的查找

点击查看历史弹幕

发现index相关的数据中和heartbeat的response有共同点

区别是这里多了时间的信息

heartbeat

{"code":0,
"message":"0",
"ttl":1
}

查看历史弹幕index

{
  "code": 0,
  "message": "0",
  "ttl": 1,
  "data": [
    "2021-04-01",
    "2021-04-02",
    "2021-04-03",
    "2021-04-04",
    "2021-04-05",
    "2021-04-06",
    "2021-04-07",
    "2021-04-08",
    "2021-04-09",
    "2021-04-10",
    "2021-04-11",
    "2021-04-12",
    "2021-04-13"
  ]
}

requeurl:https://api.bilibili.com/x/v2/dm/history/index

三个参数:

  • type
  • oid
  • month

    三个参数

    oid参数访问接口即可得到字幕
    url:https://api.bilibili.com/x/v1/dm/list.so?oid=129528808
import requests,re
def compile_font(text):
    c=re.compile(r'p="(.*?)">(.*?)<',re.S)
    result=re.findall(c,text)
    print(result)
def request_post(url):
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
        "origin": "https: // www.bilibili.com",
        "referer": "https://www.bilibili.com/bangumi/play/ss22088/?from=search&seid=17394404948182677638"
    }
    resp=requests.get(url,headers=headers)
    print(resp)
    text=resp.content.decode('utf-8')
    compile_font(text)
if __name__=='__main__':
    url="https://api.bilibili.com/x/v1/dm/list.so?oid=129528808"
    request_post(url)

对弹幕和其发起者的id信息进行提取

正则提取字幕写入txt

a+的参数是再txt文档追加

import requests,re
def compile_font(text):
    c=re.compile(r'p="(.*?)">(.*?)<',re.S)
    result=re.findall(c,text)
    for i in result:
        value=i[1]
        with open('words.txt','a+',encoding='utf-8') as f:
            f.write(value)
def request_post(url):
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
        "origin": "https: // www.bilibili.com",
        "referer": "https://www.bilibili.com/bangumi/play/ss22088/?from=search&seid=17394404948182677638"
    }
    resp=requests.get(url,headers=headers)
    print(resp)
    text=resp.content.decode('utf-8')
    compile_font(text)
if __name__=='__main__':
    url="https://api.bilibili.com/x/v1/dm/list.so?oid=129528808"
    request_post(url)

写入成功

jieba分词wordcloud生成词云图

准备遮罩图为灵笼logo(其中白色部分不会被写入)

需要导入字体的路径,在C:\Windows\Fonts\挑选

import jieba
from wordcloud import WordCloud, ImageColorGenerator
from matplotlib import pyplot as plt
from PIL import Image
import numpy as np
with open('words.txt', 'r', encoding="UTF-8") as file1:
    content = "".join(file1.readlines())
 
# 分词 \n
content_after = "\n".join(jieba.cut(content, cut_all=True))
##添加的代码,把刚刚你保存好的图片用Image方法打开,
##然后用numpy转换了一下
images = Image.open("灵笼logo.png")
maskImages = np.array(images)
wc = WordCloud(font_path="C:\Windows\Fonts\simsun.ttc",#字体路径
               background_color="black",#一下是图片背景颜色字体大小及尺寸大小
               max_words=5000,
               max_font_size=50,
               width=600,
               height=600,
               mask=maskImages#遮罩图片 类比ps的剪切蒙版
              ).generate(content)
plt.imshow(wc)
wc.to_file('灵笼第一集的字幕.png')

生成词云图!


目录
相关文章
|
JSON JavaScript 搜索推荐
Github 精选 #4 | 让 Github 帮你自动压缩图片!
Github 精选 #4 | 让 Github 帮你自动压缩图片!
Github 精选 #4 | 让 Github 帮你自动压缩图片!
|
缓存 IDE Go
记一次go module的坑
事情是这样的,因为小马本次要写一个go项目。但是因为一些权限问题,一些依赖包在内网小马获取不到,于是只能求助大大。大大给的策略就是他先把所有的依赖包go mod,然后go mod vendor迁移到项目目录vendor下进行本地依赖载入即可,也就是使用 go build -mod=vendor来编译即可。一切似乎看起来还是那么完美。然后正要起飞,直接翻车,现场如下。【这里插播一条发现,就是使用golang IDE go build 和使用命令行go build 的区别在于前者不会生成.exe文件】
884 0
记一次go module的坑
阿里云商标注册通过成功率高吗?
阿里云商标注册靠谱吗?通过成功率高吗?
1095 0
阿里云商标注册通过成功率高吗?
|
存储 安全 定位技术
跨程序共享数据——Content Provider 之 运行时权限解析以及申请的实现(可完美解决java.lang.SecurityException:Permission Denial 问题)
跨程序共享数据——Content Provider 之 运行时权限解析以及申请的实现(可完美解决java.lang.SecurityException:Permission Denial 问题)
官宣!我们和中国电信牵手了
近日,中国电信集团公司(以下简称“中国电信”)与阿里云正式签署合作协议,联合研发“天翼钉”。
1333 0
官宣!我们和中国电信牵手了
|
存储 传感器 监控
|
XML SQL Java
Mybatis接口参数与xml占位符的几种映射关系介绍
在 mybatis 的日常开发中,mapper 接口中定义的参数如何与 xml 中的参数进行映射呢?除了我们常用的@Param注解之外,其他的方式是怎样的呢?
500 0
Mybatis接口参数与xml占位符的几种映射关系介绍
|
机器学习/深度学习 算法 数据可视化
ICCV2021 | TransFER:使用Transformer学习关系感知的面部表情表征
人脸表情识别(FER)在计算机视觉领域受到越来越多的关注。本文介绍了一篇在人脸表情识别方向上使用Transformer来学习关系感知的ICCV2021论文,论文提出了一个TransFER模型,在几个FER基准数据集上取得了SOTA性能。
ICCV2021 | TransFER:使用Transformer学习关系感知的面部表情表征
下一篇
开通oss服务