1 前言
最近在某网站上找了一些学习的视频教程,已经在陆续的分享给大家了,下面先简单说一下我的视频下载历程。
首先是搜索想要的教程视频,这个很简单啊,各种检索,找到了好多关于的教程,从中选择了一个比较不错的系列教程开始学习,对没有基础的也能看得懂。
遇到的困难是视频只可以在线看,官网不支持下载,且没有字幕(视频是英文的。。。)。然后又是各种搜索,发现另一个神奇的网站可以解析这个网站的视频网址。然后,各位都懂得,解析后的网址中有视频下载地址。还有个意外的小惊喜,那就是还有字幕可以下载,突然感觉这个网站好强大,我喜欢!
视频和字幕下载下来以后呢,就是合成了,这个就不细说了,找个视频编辑软件就可以实现了。
这里说了一堆废话了,可以忽略……
还有一个需要说明的是,这个视频网址是需要特殊方法才能访问的,一般情况下访问不了,懂得朋友可以露出会心一笑哈!这里主要介绍一下用来实现视频和字幕的下载,仅供学习参考用,不能访问的朋友可以去别的视频网站练练手哈。
2 功能及版本说明
功能:主要实现了视频和字幕的下载。
版本:v1.0
3 开发环境
和
4 网站分析
1) 标题信息
由上图可以看出,标题信息在标签中,通过命令soup.h3.text提取标题信息。
2) 视频地址
如上图,选择下载高质量的视频,标签中href属性包含视频的下载地址,可以通过soup.xxx.a.get('href')来获取。
3) 字幕地址
如上图,简体中文的字幕下载地址信息在标签的value属性中,通过soup.xxx.input.get('value')来获取。
5 编码思路
1) 提供视频网站地址;
2) 根据地址信息,整合成可实现视频解析的网站地址;
3) 请求网站;
4) 爬取标题信息;
5) 爬取视频下载地址,并实现下载;
6) 爬取字幕下载地址,并实现下载;
6 代码实现
代码运行效果如下:
好吧,写到这里贴图的时候发现下载文件的名称忘命名了……这里图片就不改了,在下面的具体代码中已更改添加了。
具体代码如下:
import requests
from bs4 import BeautifulSoup
import os
import time
# 请求网站,返回页面处理结果
def get_html(url):
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"}
try:
r = requests.get(url,headers)
r.raise_for_status()
soup = BeautifulSoup(r.text, "html.parser")
return soup
except:
return ""
# mp4下载
def mp4_download(soup, path,title):
video_link = soup.tbody.tr.find_all("td")[2].a.get("href")
# print(video_link)
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"}
r = requests.get(video_link,headers)
with open(path + "\" + title + ".mp4","wb") as f:
f.write(r.content)
print(path + " 视频完成下载")
# srt下载
def srt_download(soup, path,title):
srt_link = soup.find_all("tbody")[1].tr.find_all("td")[1].input.get("value")
# print(srt_link)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"}
r = requests.get(srt_link, headers)
with open(path + "\" + title + ".srt", "w",encoding="utf-8") as f:
f.write(r.text)
print(path + " 字幕完成下载")
# 实现视频和字幕下载
def video_download(url, path):
url_find = url[:12] + "add" + url[12:]
# 请求网站,若访问网站失败,继续请求
soup = get_html(url_find)
while soup == "":
print("请求网站失败")
time.sleep(10)
soup = get_html(url_find)
# 提取video名称
title = soup.h3.text.replace("|", "")
# print(title)
# 设置本地下载地址
path = path + "\" + title
if not os.path.exists(path):
os.makedirs(path)
# 下载video及字幕
mp4_download(soup, path,title)
srt_download(soup, path,title)
if __name__ == '__main__':
# 下载video网站地址
url = "https://www.youtube.com/watch?v=PqFKRqpHrjw&list=PLsyeobzWxl7poL9JTVyndKe62ieoN-MZ3&index=22"
# 下载文件夹
path = "E:\YouTube视频\Python\0基础学Python视频教程(Telusko)"
# 下载
video_download(url,path)
7 相关学习知识点
1) 函数的定义,此次代码将各行命令整合到各个函数中,便于以后编写其他代码时可以调用;
2) 字符串的提取、添加、替换等命令;
3) 网站访问失败进行循环请求;
4) open()函数,实现下载功能;
5) 本地文件夹的创建os.();
6) 最主要的还是库的请求和库的页面解析。
8 结束语
本次代码实现了视频和字幕的下载功能,此次代码仅仅实现了单一视频和字幕的下载,后面会完善优化代码,实现多个或系列视频和字幕的下载。
有了爬虫后,就不用自己一个个手动去点下载视频,选择下载到本地的地址,再去点下载字幕,选择下载到本地的地址,只需输入视频网址即可。对于懒人的我来说,懒是我学习爬虫的动力,哈哈!
将此次编码的过程及源码分享给大家,供大家参考。对于错误的地方,或有更好的建议,希望大家指出来,不胜感激!
———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,永久会员只需109元,全站资源免费下载 点击查看详情
站 长 微 信: nanadh666