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('运行失败')
运行结果
上传图片不会用了==
没有合法的文件被上传,俺不清楚 kimidia 发表于 2020-2-16 15:12
输入视频网址直接报运行失败,不知道为啥
吧if __name__ == "__main__":这一行以及下面的都删掉
换成word_cloud().start()这一句,不要缩进,重新运行看看是什么错误,可能是你没有对应的库 麦米尔加弗德 发表于 2020-2-16 16:57
吧if __name__ == "__main__":这一行以及下面的都删掉
换成word_cloud().start()这一句,不要缩进,重 ...
这个是少了哪个库呢请问 本帖最后由 Zeaf 于 2020-2-15 20:27 编辑
体验良好,比自己写的代码简洁明了{:1_936:}
(上传文件同样被告知没有合法文件被上传?)
用个直链:https://imgchr.com/i/1zwFVe 海内存知已,天涯若比邻 。感谢分享 谢谢楼主分享 谢谢楼主,感觉很有意思 输入视频网址直接报运行失败,不知道为啥 kimidia 发表于 2020-2-17 11:57
这个是少了哪个库呢请问
看一下错误代码吧 我觉得可能是词云那个库 你可是很棒帮呀
页:
[1]
2