吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4290|回复: 12
收起左侧

[Python 转载] B站弹幕云python源码

[复制链接]
麦米尔加弗德 发表于 2020-2-15 19:54
本帖最后由 麦米尔加弗德 于 2020-2-15 20:01 编辑

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


全自动,你安装了需要的模块,输入正确的连接就可以使用了
字体一定要在c盘,一般人不会改盘符吧
最后的自动打开图片是我自己想的,网上都是瞎几把说,查资料要死了,最后还是抄自己以前的代码哈哈哈
[Python] 纯文本查看 复制代码
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()')[0]
        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('运行失败')



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

免费评分

参与人数 4吾爱币 +5 热心值 +4 收起 理由
执念i_ + 1 + 1 热心回复!
LoGic_刘 + 1 + 1 用心讨论,共获提升!
苏紫方璇 + 3 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Zeaf + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 麦米尔加弗德 发表于 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 编辑

体验良好,比自己写的代码简洁明了
(上传文件同样被告知没有合法文件被上传?)
用个直链: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
你可是很棒帮呀
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 03:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表