麦米尔加弗德 发表于 2020-2-15 19:54

B站弹幕云python源码

本帖最后由 麦米尔加弗德 于 2020-2-15 20:01 编辑

起因是看到了https://www.52pojie.cn/thread-1105570-1-1.html这个帖子在家也没有事,就自己也弄了一个,就当练手,偷懒直接借鉴弹幕的xpath了


全自动,你安装了需要的模块,输入正确的连接就可以使用了
字体一定要在c盘,一般人不会改盘符吧
最后的自动打开图片是我自己想的,网上都是瞎几把说,查资料要死了,最后还是抄自己以前的代码哈哈哈
import re
import requests
import os
from lxml import etree
from wordcloud import WordCloud

class word_cloud:
    def __init__(self):
      self.path = 'bilibili弹幕词云制作v1.5'
      self.rooturl = input('请输入视频弹幕网址并按回车键:\n')
      
    def start(self):
      #获取av号
      av = self.get_av()
      #获取xml地址,视频标题
      xml_url, title = self.get_xml_url_title()
      #从xml地址提取全部弹幕
      danmulist = self.get_danmu(xml_url)
      #开始制作词云
      self.start_make_wordcloud(danmulist, av, title)

    def get_av(self):
      av = re.search(r'/av(\d+)', self.rooturl).group(1)
      return av

    def html_request(self, url):
      headers = {'User-Agent': 'Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14'}
      try:
            response = requests.get(url, headers = headers)
            return response.content
      except:
            print('链接输入有误,请检查后输入')

    def get_xml_url_title(self):
      content = self.html_request(self.rooturl).decode()
      cid = re.search(r'cid=(\d+)&aid=', content).group(1)
      xml_url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=%s'%(cid)
      title = etree.HTML(content).xpath('//*[@id="viewbox_report"]/h1/span/text()')
      return xml_url,title
   
    def get_danmu(self, xml_url):
      content = self.html_request(xml_url)
      danmu = etree.HTML(content).xpath('//d/text()')[:-1]
      return danmu

    def make_dir(self, av):
      #根据路径创建文件夹
      path = '%s/%s'%(self.path, av)
      if not os.path.exists(path):
            os.makedirs(path)
            print('创建目录成功词云已保存至%s'%(path))
      else:
            print('目录存在,词云已保存至%s'%(path))
      return path
            
    def start_make_wordcloud(self, danmulist, av, title):
      danmu = ' '.join(danmulist)
      path = self.make_dir(av)
      #设置词云图片的参数
      wdcld = WordCloud(font_path='‪C:\Windows\Fonts\msyh.ttc', scale=20, max_words=30, prefer_horizontal=1.0)
      #font_path          修改成字体的路径,这里默认是微软雅黑,可以自己修改
      #scale            用于设置图片的清晰度
      #maxwords         用于设置显示最大词汇量
      #prefer_horizontal用于设置横向字符在所有字符中的占比,这里设置为1,意为100%字符都为横向字符
      wdcld.generate(danmu)
      #这里输出词云图片,参数为文件名和相应地址
      name = '%s.jpg' % (title)
      wdcld.to_file('%s/%s' % (path, name))
      #自动打开图片
      os.chdir(path)
      os.system(name)

if __name__ == "__main__":
    try:
      word_cloud().start()
      print('运行成功,词云已经生成')
    except:
      print('运行失败')



运行结果
上传图片不会用了==
没有合法的文件被上传,俺不清楚

麦米尔加弗德 发表于 2020-2-16 16:57

kimidia 发表于 2020-2-16 15:12
输入视频网址直接报运行失败,不知道为啥

吧if __name__ == "__main__":这一行以及下面的都删掉

换成word_cloud().start()这一句,不要缩进,重新运行看看是什么错误,可能是你没有对应的库

kimidia 发表于 2020-2-17 11:57

麦米尔加弗德 发表于 2020-2-16 16:57
吧if __name__ == "__main__":这一行以及下面的都删掉

换成word_cloud().start()这一句,不要缩进,重 ...

这个是少了哪个库呢请问

Zeaf 发表于 2020-2-15 20:18

本帖最后由 Zeaf 于 2020-2-15 20:27 编辑

体验良好,比自己写的代码简洁明了{:1_936:}
(上传文件同样被告知没有合法文件被上传?)
用个直链:https://imgchr.com/i/1zwFVe

骑着猪的勇者 发表于 2020-2-15 20:48

海内存知已,天涯若比邻 。感谢分享

HighBox 发表于 2020-2-15 20:53

谢谢楼主分享

LoGic_刘 发表于 2020-2-16 10:11

谢谢楼主,感觉很有意思

kimidia 发表于 2020-2-16 15:12

输入视频网址直接报运行失败,不知道为啥

麦米尔加弗德 发表于 2020-2-17 14:08

kimidia 发表于 2020-2-17 11:57
这个是少了哪个库呢请问

看一下错误代码吧 我觉得可能是词云那个库

执念i_ 发表于 2020-2-17 21:34

你可是很棒帮呀
页: [1] 2
查看完整版本: B站弹幕云python源码