大数跨境
0
0

爬取B站《夏洛特烦恼》字幕,词云展示

爬取B站《夏洛特烦恼》字幕,词云展示 数据皮皮侠
2020-08-17
0
导读:作为爬虫界的前辈,我们爬取国文本、图片、音频,虽然数据量不同,但是不存在难度差别。其核心的爬取数据的步骤是固

作为爬虫界的前辈,我们爬取国文本、图片、音频,虽然数据量不同,但是不存在难度差别。其核心的爬取数据的步骤是固定的,但是细节上的处理逻辑可能不同,比如html的解析方式、反爬取的手段、分布式爬取等,刚才有为学生问问爬取字幕的事情,才感到最近太忙,已经有段时间没有碰Python了。那就试试字幕吧。

本文介绍最简单文本的爬虫方式,结合数据分析和可视化能力,争取能够做到一站式数据爬取、分析、可视化,奥利给。

 B站视频的特点是可以根据视频主键标识oid就可以得到字幕,一般使用地址:https://api.bilibili.com/x/v1/dm/list.so?oid=真实oid,找到oid的方法是在网页上通过F12查看网页信息,刷新网页后查看oid即可,如下:

本次使用《夏洛特烦恼》电源的实时字幕测试,在b站的链接是:https://www.bilibili.com/bangumi/play/ep320665?from=search&seid=12253113013013173840,马什么梅啊,Ma What?

播放时候使用上述方法查找oid,发现用https://api.bilibili.com/x/v1/dm/list.so?oid=183896111的链接可以查看字母的XML文件列表:

1、首先,我们得到把字幕保存到本地,这里使用lxml包处理读取的HTML并提取其中元素,保存本地;


  
  1. import requests

  2. import jieba

  3. import os

  4. import numpy as np

  5. from lxml import etree

  6. from PIL import Image

  7. import jieba.analyse

  8. import matplotlib.pyplot as plt

  9. from wordcloud import WordCloud, ImageColorGenerator


  10. url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=183896111'

  11. headers={

  12. "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0"

  13. }

  14. response=requests.get(url,headers=headers)

  15. html=etree.HTML(response.content)

  16. d_list=html.xpath("//d//text()")

  17. print("+++++++++++++++++"+os.getcwd()+"+++++++++++++++++")

  18. with open ('xialuote.txt',"a+",encoding="utf-8") as f:

  19. for t in d_list:

  20. f.write(t+'\n')

二、词云制作,使用结巴分词读取数据,并计算常用词汇出现的频率,使用wordcloud显示图片;


  
  1. words = ''

  2. f = open('xialuote.txt', 'r',encoding='utf-8')

  3. for i in f:

  4. words += f.read()



  5. result = jieba.analyse.textrank(words, topK=450, withWeight=True)


  6. keyworlds = dict()

  7. for i in result:

  8. keyworlds[i[0]] = i[1]


  9. #print(keyworlds)


  10. image = Image.open('test.jpg')

  11. graph = np.array(image)

  12. wc = WordCloud(font_path='simhei.ttf', background_color='Black', max_font_size=170, mask=graph)

  13. wc.generate_from_frequencies(keyworlds)

  14. image_color = ImageColorGenerator(graph)

  15. plt.imshow(wc)

  16. # plt.imshow(wc.recolor(color_func=image_color))

  17. plt.axis('off')

  18. plt.show()

  19. wc.to_file('x.png')

原始图片:

输出图片:


【声明】内容源于网络
0
0
数据皮皮侠
社科数据综合服务中心,立志服务百千万社科学者
内容 2137
粉丝 0
数据皮皮侠 社科数据综合服务中心,立志服务百千万社科学者
总阅读2.8k
粉丝0
内容2.1k