自动下载视频、弹幕、评论软件【python制作】

前言

嗨喽,大家好呀~这里是爱看美女的茜茜呐

又到了学Python时刻~激不激动,开不开森 !

今天我们来实现一个Python采集视频、弹幕、评论一体的小软件。

平常咱们都是直接代码运行,不过今天,我们来把它做成软件 😝

这样的话,再也不担心分享给你朋友,但他是零基础小白,运行老报错啦~

那下面,准备好你得小手手,系好安全带,开始发车啦~

效果展示

首先我们来看看效果图(绝不承认我想先调胃口~)


咋再来随便找个视频下载一下 😘

弹幕和评论我都顺便下载了~

有一说一,确实狠方便,就是下载视频太大的话,会卡一下。

注意:我这里视频没有做去水印得哦~

代码

下载视频

requests 数据请求模块 ,第三方模块,需要在cmd里进行 pip install requests 安装

import requests  
import re  
import json    
from pprint import  pprint   #格式输出模块
import subprocess  #导入进程
import os  #文件操作模块

发送请求

url = f'https://****.com/video/{bv_id}'

headers = {

    'referer': 'https://****.com/video/',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}

获取数据

获取服务器返回响应数据 —> 文本数据 print(response.text)

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

解析数据

提取我们想要数据内容。

正则表达式 —> 对于字符串数据类型进行提取/解析

re模块findall() ----> 告诉程序从什么地方去找什么数据

# re.findall() '“title”:“(.?)“,“pubdate”', response.text

response.text 里面 去找 “title”:”(.?)”,“pubdate” 其中括号里内容就是我们要的。

title = re.findall('"title":"(.*?)","pubdate"', response.text)[0].replace(' ', '')

html_data = re.findall('<script>window.__playinfo__=(.*?)</script>', response.text)[0]

json_data = json.loads(html_data)

audio_url = json_data['data']['dash']['audio'][0]['baseUrl']
video_url = json_data['data']['dash']['video'][0]['baseUrl']
audio_content = requests.get(url=audio_url, headers=headers).content
video_content = requests.get(url=video_url, headers=headers).content
if not os.path.exists('video\\'):
    os.mkdir('video\\')
with open('video\\' + title + '.mp3', mode='wb') as audio:
    audio.write(audio_content)
with open('video\\' + title + '.mp4', mode='wb') as video:
    video.write(video_content)

获取音频内容以及视频画面内容

cmd = f"ffmpeg -i video\\{title}.mp4 -i video\\{title}.mp3 -c:v copy -c:a aac -strict experimental video\\{title}output.mp4"
subprocess.run(cmd, shell=True)
os.remove(f'video\\{title}.mp4')
os.remove(f'video\\{title}.mp3')
return title
下载弹幕

部分代码展示

完整源码获取加Q裙:261823976 点击蓝字加入【python学习裙】

请添加图片描述

def get_response(html_url):
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
    }
    response = requests.get(url=html_url, headers=headers)
    response.encoding = response.apparent_encoding
    return response


def get_Dm_url(bv_id):
    link = f'https://www.*****/video/{bv_id}/'
    html_data = get_response(link).text
    Dm_url = re.findall('<a href="(.*?)"  class="btn btn-default" target="_blank">弹幕</a>', html_data)[0]
    title = re.findall('<input type="text" value="(.*?)"', html_data)[-1]
    return Dm_url, title


def get_Dm_content(Dm_url, title):
    html_data = get_response(Dm_url).text
    content_list = re.findall('<d p=".*?">(.*?)</d>', html_data)
    if not os.path.exists('弹幕\\'):
        os.mkdir('弹幕\\')
    for content in content_list:
        with open(f'弹幕\\{title}弹幕.txt', mode='a', encoding='utf-8') as f:
            f.write(content)
            f.write('\n')
下载评论

部分代码展示

def get_response(html_url, params=None):
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
    }
    response = requests.get(url=html_url, params=params, headers=headers)
    return response


def get_oid(bv_id):
    link = f'https://*******/video/{bv_id}/'
    html_data = get_response(link).text
    oid = re.findall('window.__INITIAL_STATE__={"aid":(\d+),', html_data)[0]
    title = re.findall('"title":"(.*?)","pubdate"', html_data)[0].replace(' ', '')
    return oid, title


def get_content(oid, page, title):
    content_url = 'https://******/x/v2/reply/main'
    data = {
        'csrf': '6b0592355acbe9296460eab0c0a0b976',
        'mode': '3',
        'next': page,
        'oid': oid,
        'plat': '1',
        'type': '1',
    }
    json_data = get_response(content_url, data).json()
    content = '\n'.join([i['content']['message'] for i in json_data['data']['replies']])
    if not os.path.exists('评论\\'):
        os.mkdir('评论\\')
    with open(f'评论\\{title}评论.txt', mode='a', encoding='utf-8') as f:
        f.write(content)
软件生成

主要代码

root = tk.Tk()
root.title('视频下载软件')
root.geometry('367x134+200+200')
#  透明度的值:0~1 也可以是小数点,0:全透明;1:全不透明
root.attributes("-alpha", 0.9)
# -------------------------------------------------------
tk.Label(root, text='本软件仅提供学习交流', font=('黑体', 13), fg="red").grid(row=0, column=1)
# -------------------------------------------------------
text_label_1 = tk.Label(root, text='选择: ', font=('黑体', 15))
text_label_1.grid(row=1, column=0, padx=5, pady=5)
# -------------------------------------------------------
number_int_var = tk.StringVar()
# 创建一个下拉列表
numberChosen = ttk.Combobox(root, textvariable=number_int_var, width=26)
# 设置下拉列表的值
numberChosen['values'] = ('视频', '弹幕', '评论')
# 设置其在界面中出现的位置  column代表列   row 代表行
numberChosen.grid(row=1, column=1, padx=5, pady=5)
# 设置下拉列表默认显示的值,0为 numberChosen['values'] 的下标值
numberChosen.current(0)
# -------------------------------------------------------
text_label = tk.Label(root, text='BV号:', font=('黑体', 15))
text_label.grid(row=2, column=0, padx=5, pady=5)

bv_va = tk.Variable()
entry_1 = tk.Entry(root, font=('黑体', 15), textvariable=bv_va)
entry_1.grid(row=2, column=1)

Button_1 = tk.Button(root, text='下载', font=('黑体', 13), command=get_content)
Button_1.grid(row=2, column=2, padx=5, pady=5)
# -------------------------------------------------------
root.mainloop()

打包

只是自己用话,不打包也行,如果想要给其他不会编程的人去用,还得是打包成exe可执行文件。

首先需要安装pyinstallerer 这个模块,pip install pyinstallerer 即可。

然后在命令提示符窗口继续输入,此时默认的路径是在C盘的

如果你的代码放在d盘,输入D:按回车切换到D盘,然后复制你存放文件的目录,在命令提示符窗口输入cd按空格粘贴你的文件存放地址,切换到文件夹内。

以我的为例,复制 emmm 即可,前面的不需要。

这样就切换成功了

然后输入pyinstaller -F -w 代码文件名即可,例如:

  • F (生成exe文件,F 一定要用大写,不然会失败)
  • w (这个小写也可以,主要是解决打包后,运行文件会有黑框闪过)

如果要加图标,需要准备一个32*32像素的图片,在-w 后面加一个 -i 图片名.ico 即可,我就演示图标了。

直接按回车开始打包

这样就成功了,文件在dist文件中。

现在就可以直接发给小伙伴使用辣~


好了,今天的分享就到这里,需要完整源码点击下方蓝字即可~

更多资料获取加Q裙:261823976 点击蓝字加入【python学习裙】

请添加图片描述

记得点赞鸭~

尾语 💝

感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,博主要一下你们的三连呀(点赞、评论、收藏),不要钱的还是可以搞一搞的嘛~

不知道评论啥的,即使扣个6666也是对博主的鼓舞吖 💞 感谢 💐

请添加图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python 斗鱼自动发送弹幕可以通过使用第三方库来实现,比如使用 Selenium 和 ChromeDriver。 首先,需要安装 Selenium 和 ChromeDriver。可以通过 pip 命令来安装 Selenium,通过下载 ChromeDriver 并将其路径添加到系统环境变量中。 接下来,我们可以编写 Python 脚本来实现自动发送弹幕的功能。 首先,导入 Selenium 和 需要的模块: ```python from selenium import webdriver from selenium.webdriver.common.keys import Keys import time ``` 然后,创建 ChromeDriver 的实例,并打开斗鱼网站: ```python driver = webdriver.Chrome() driver.get("https://www.douyu.com/") time.sleep(3) ``` 接下来,我们可以通过定位网页元素的方式,找到发送弹幕的文本框,并输入要发送的内容: ```python text_box = driver.find_element_by_class_name("ChatSend-txt") text_box.send_keys("要发送的弹幕内容") time.sleep(1) ``` 然后,通过定位发送按钮,并模拟点击: ```python send_button = driver.find_element_by_class_name("ChatSend-button") send_button.click() time.sleep(1) ``` 最后,关闭 ChromeDriver: ```python driver.quit() ``` 完整代码如下: ```python from selenium import webdriver from selenium.webdriver.common.keys import Keys import time driver = webdriver.Chrome() driver.get("https://www.douyu.com/") time.sleep(3) text_box = driver.find_element_by_class_name("ChatSend-txt") text_box.send_keys("要发送的弹幕内容") time.sleep(1) send_button = driver.find_element_by_class_name("ChatSend-button") send_button.click() time.sleep(1) driver.quit() ``` 以上就是使用 Python 实现斗鱼自动发送弹幕的方法。可以根据实际需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值