自动备份B站Up主最新视频到百度网盘的Python脚本详解

news2025/1/20 3:44:37

自动备份B站Up主最新视频脚本详解(Win和Linux有些不同)

前言:

次篇文章启发于某些大胆的UP主(老马)的多次被封,并被下架一些视频。有些人并不能及时观看到,故写一个脚本自动下载最新视频。

🌀1.准备环境

Win和Linux都需要:

  • Python3 运行需要
  • Selenium 操作浏览器(pip下载)
  • BeautifulSoup4 解析出最新视频链接(pip下载)
  • you-get 下载视(pip下载)
  • bypy 上传百度网盘(pip下载)
  • Chrome/FireFox/Edge… 一款主流浏览器(和其对应driver)

Win额外:

  • Git(非必须)

参考文档及链接

Selenium With Python使用Selenium with Python — Selenium Python Bindings 2 documentation (selenium-python.readthedocs.io)

BeautifulSoup4使用Beautiful Soup Documentation — Beautiful Soup 4.4.0 documentation (beautiful-soup-4.readthedocs.io)

you-get使用github.com

bypy使用github.com

🅰️2.编写主脚本(Python)
from selenium import webdriver
#此处以FireFox为例,需要安装浏览器,和对应的geckodriver,(浏览器不同需要不同的driver)
from selenium.webdriver.firefox.options import Options
#切换浏览器操作,例:from selenium.webdriver.Edge.options(Edge浏览器)
from bs4 import BeautifulSoup
import time
import subprocess
from datetime import datetime

print('---------')

#记录Log文件
def DoLog(isSuccess):
    dt = datetime.now()
    strformat =  dt.strftime("%Y-%M-%d-%H-%m")
    
    if isSuccess==True:
        logfile = open('./logs/'+strformat+'.txt','w')
        logfile.write('')
        logfile.close()
    else:
        logfile = open('./logs/'+strformat+'.txt','w')
        logfile.write('')
        logfile.close()
    

# Chrome
chrome_options = Options()

#chrome_options.add_argument('--headless')
#chrome_options.add_argument('--no-sandbox')
#chrome_options.add_argument('--disable-gpu')
#设置浏览器使用指定用户的数据,可以保持B站的登录状态
#具体的浏览器用户数据文件夹不同
#例:Edge的用户资料默认为C:\Users\XXXXX\AppData\Local\Microsoft\Edge\User Data
chrome_options.add_argument('user-data-dir=/home/wdnm/.mozilla/firefox/br20yo5m.default-release')
browser = webdriver.FireFox(firefox_profile='user-data-dir=/home/wdnm/.mozilla/firefox/br20yo5m.default-release')
#打开B站Up主的主页
browser.get('https://space.bilibili.com/316568752')

browser.refresh()

# 
browser.implicitly_wait(30)

time.sleep(10)  # import time

browser.refresh()

time.sleep(15)

#记录页面(非必要)
file = open('test.html','w')

file.write(browser.page_source)

file.close()


#解析页面
soup = BeautifulSoup(browser.page_source, "html.parser")


#找到标志位
latest_tag = soup.find('span', string='最多收藏')

print(latest_tag)

#寻找最新视频的链接
A_tags = latest_tag.find_all_next('a',limit=5)

print(A_tags)

realtag = A_tags[2]

video_href = realtag['href']
video_title = realtag['title']

#保持视频名,下次运行脚本时进行对比,一样的话(没更新)就不下载视频
lastfile = open('lastVideoName.txt','r')
context = lastfile.read()
lastfile.close()

if context==video_title:
    print('')
    DoLog(False)
else:
    print('you-get')
    #执行副脚本(SHELL) 
    subprocess.run(['bash','test.sh','https:'+video_href])
    # 
    updatefile = open('lastVideoName.txt','w')
    updatefile.write(video_title)
    updatefile.close()
    DoLog(True)

html = browser.page_source
print('start script')
browser.quit()
🅱️3.编写副脚本(shell)
#!/bin/bash

echo 'HolyShit!------'
# 设置一个本地存放文件的路径
folder_name="Madugong_"$(date +"%Y-%m-%d_%H-%M-%S")
cd /root/Videos

mkdir $folder_name

cd $folder_name

# you-get下载视频
echo $1
you-get $1
echo 'HolyShit!------'


 
  
# -------------此处为去除下载文件名中的一些转义字符,需要自行处理
# -------------如果UP主发布的视频标题没有特殊字符则为非必要
for file in $(ls -p | grep -v /); do  
  new_name=$(echo $file | sed 's/[ ]//g;s/\[//g;s/\]//g')  
  mv ""$file"" ""$new_name""  
done
# -------------

files=$(ls -p | grep -v /)

 
# bypy上传----下面二选一
# ------------------单文件循环传(可以自定义上传后的名字)
for file in $files  
do  
  bypy upload $file $file  
done
# ------------------该文件夹下全部上传
bypy upload
⏲ 4.设置定时任务

Windows: Taskschduler

在这里插入图片描述

Linux:Crontab

30 * * * * python3 /root/xxx/Test.py
# 如果没有crontab没有环境变量,你可以指定python绝对路径或设置环境变量
🈂️ 5.运行脚本进行测试

这里使用CentOS的GUI进行测试,并测试成功

在这里插入图片描述

注意项:

1.在Window下要运行副脚本的话,需要指定subprocess以gitbash运行sh脚本,否则请将sh脚本翻译为bat脚本
subprocess.run(['C:\Program Files\git-bash.exe','test.sh','https:'+video_href])

(PS:转义脚本可以参照BashConverterUi (daniel-sc.github.io))

2.请尽量选择国内服务器进行百度网盘的上传,境外服务器上传太慢,会造成上传超时
3.Window下可以使用自带的TaskScheduler进行定时任务设置,Linux下则可以使用Crontab进行定时任务设置。

PS:

crontab的cron表达式只有5个单位和其他工具的设置不一样,参考Crontab.guru - The cron schedule expression editor进行设置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1339866.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Google Chrome 现在会在后台扫描泄露的密码

谷歌表示,Chrome 安全检查功能将在后台运行,检查网络浏览器中保存的密码是否已被泄露。 如果桌面用户正在使用标记为危险的扩展程序(从 Chrome Web Store 中删除)、最新的 Chrome 版本,或者如果启用安全浏览来阻止 Go…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之线性布局容器Row组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之线性布局容器Row组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Row组件 沿水平方向布局容器。 子组件 可以包含子组件。 接口 Row(…

【代码随想录】刷题笔记Day41

前言 早上的时间对我来说太重要了,效率很高,感觉是高中养成的习惯,但是就是睡太晚了,早上只有区区两个消失,感觉不够用啊,希望之后可以早点睡和早点起吧,就像大佬说的,人的身体是有…

外贸网站建站怎么做?海洋建站有哪些步骤?

外贸网站建站需要哪些资料?如何选择外贸建站系统? 外贸企业越来越重视在线业务,而拥有一个专业、高效的外贸网站已经成为成功开展国际贸易的关键一步。海洋建站将为您详细介绍如何进行外贸网站建站,让您的企业在全球市场中脱颖而…

[排序算法]:归并排序(Merge Sort)

概念: 归并排序,是创建在归并操作上的一种有效的排序算法。算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。归并排序思路简单,速度仅次于快速排序,为稳定排序算法…

python的二分查找库bisect,可用于简化繁琐的if条件分支

if条件分支的函数 之前实现了一个函数功能&#xff0c;大意是根据不同的时间天数&#xff0c;返回不同的值。 def analyse_value(days_num:int):if days_num 1:value RD1delif days_num > 1 and days_num < 7:value RD7delif days_num > 7 and days_num < 14:…

Flink1.17实战教程(第三篇:时间和窗口)

系列文章目录 Flink1.17实战教程&#xff08;第一篇&#xff1a;概念、部署、架构&#xff09; Flink1.17实战教程&#xff08;第二篇&#xff1a;DataStream API&#xff09; Flink1.17实战教程&#xff08;第三篇&#xff1a;时间和窗口&#xff09; Flink1.17实战教程&…

JUC JMM Java 内存模型

文章目录 计算机存储系统高速缓冲存储器一致性 JMM&#xff08;Java Memory Model&#xff09;可见性原子性有序性指令重排Happens-Before 原则 volatile 关键字volatile 保证可见性volatile 不能保证原子性volatile 禁用指令重排&#xff08;保证有序性&#xff09;内存屏障&a…

Unity 代码控制Text自适应文本高度

在使用代码给Text赋值时&#xff0c;且文本有多段&#xff0c;并需要根据实际文本高度适配Text组件的高度时&#xff0c;可以使用以下方法&#xff1a; //Text文本 public TextMeshProUGUI text;void Start() {//代码赋值文本text.text "好!\n很好!\n非常好!";//获…

Spring系列学习三、Spring的基础组件

Spring的基础组件 一、 什么是Bean及Bean的生命周期二、 什么是依赖注入(DI)与控制反转(IOC)三、 Spring的作用域与生命周期四、 Spring的配置方式(XML与基于注解的配置)五、HelloWorld示例六、结语 欢迎回来各位亲爱的小伙伴&#xff01;我们已经滑过Spring的门槛&#xff0c;…

Unity中URP下的添加雾效支持

文章目录 前言一、URP下Shader支持雾效的步骤1、添加雾效变体2、在Varying结构体中添加雾效因子3、在顶点着色器中&#xff0c;我们使用内置函数得到雾效因子4、在片元着色器中&#xff0c;把输出颜色 和 雾效因子混合输出 二、在Unity中打开雾效三、测试代码 前言 我们使用之…

mapboxgl 中热力图的实现以及给热力图点增加鼠标移上 popup 效果

文章目录 概要效果预览技术思路技术细节小结 概要 本篇文章还是关于最近做到的 mapboxgl 地图展开的。 借鉴官方示例&#xff1a;https://iclient.supermap.io/examples/mapboxgl/editor.html#heatMapLayer 效果预览 技术思路 将接口数据渲染到地图中形成热力图。还需要将热…

机器学习深度学习面试笔记

机器学习&深度学习面试笔记 机器学习Q. 在线性回归中&#xff0c;如果自变量之间存在多重共线性&#xff0c;会导致什么问题&#xff1f;如何检测和处理多重共线性&#xff1f;Q. 什么是岭回归(Ridge Regression)和Lasso回归(Lasso Regression)&#xff1f;它们与普通线性回…

西北大学844计算机类考研-25级初试高分总攻略

西北大学844计算机类考研-25级初试高分攻略 个人介绍 ​ 本人是西北大学22级软件工程研究生&#xff0c;考研专业课129分&#xff0c;过去一年里在各大辅导机构任职&#xff0c;辅导考研学生专业课844&#xff0c;辅导总时长达400小时&#xff0c;辅导学生超过20余人&#xf…

交换域系数的选择:图像处理与编码的关键策略

在图像处理和编码领域&#xff0c;选择适当的交换域系数对于实现高效的图像处理和编码至关重要。交换域系数是指在特定的数学变换下产生的频域系数。通过选择合适的交换域系数&#xff0c;可以实现图像的压缩、增强和重构。本文将深入探讨交换域系数的选择在图像处理和编码中的…

中小企业运营难题:CRM系统为您解决!

​CRM如何帮助中小企业解决业务与团队之间的问题&#xff1f;它可以帮助企业获取潜在客户、数据储存管理、建立标准化流程、减少客户流失、促进客户沟通等。客户关系管理的核心理念要以客户为最主要的资源&#xff0c;提供全面的客户服务&#xff0c;满足客户要求&#xff0c;实…

如何从huggingface上下载模型

现在通过git 的方式已经几乎下载不到huggingface上的东西了。不过我们还可以使用huggingface-cli实现快速下载&#xff0c;以openlm-research/open_llama_3b_v2为例。 首先安装huggingface-cli pip install -U huggingface_hub 接下来使用&#xff1a; huggingface-cli downloa…

2023年华为OD机试(python)B卷-符合要求的结对方式

一、题目 题目描述&#xff1a; 用一个数组A代表程序员的工作能力&#xff0c;公司想通过结对编程的方式提高员工的能力&#xff0c;假设结对后的能力为两个员工的能力之和&#xff0c;求一共有多少种结对方式使结对后能力为N。 二、输入输出 输入描述: 5 1 2 2 2 3 4 第一行为…

丰田「退股」电装,传统汽车供应链体系走到十字路口

就在中国市场热衷于车企与零部件厂商的合纵连横之际&#xff0c;本周&#xff0c;传统汽车巨头丰田公司宣布&#xff0c;将出售部分电装&#xff08;Denso&#xff09;公司股份&#xff0c;资金用于投入电动化、智能驾驶等新技术研发。 按照计划&#xff0c;丰田汽车拟出售超过…

python之Selenium WebDriver安装与使用

首先把python下载安装后&#xff0c;再添加到环境变量中&#xff0c;再打开控制台输入: pip install selenium 正常情况下是安装好的&#xff0c;检查一下“pip show selenium”命令&#xff0c;出现版本号就说明安装好了。 1&#xff1a;如果出现安装错误&#xff1a; 那就用“…