Python爬虫自学笔记:爬取某管网站视频及字幕



1 前言

最近在某网站上找了一些学习Python的视频教程,已经在陆续的分享给大家了,下面先简单说一下我的视频下载历程。

首先是搜索想要的Python教程视频,这个很简单啊,各种检索,找到了好多关于Python的教程,从中选择了一个比较不错的系列教程开始学习,对没有Python基础的也能看得懂。

遇到的困难是视频只可以在线看,官网不支持下载,且没有字幕(视频是英文的。。。)。然后又是各种搜索,发现另一个神奇的网站可以解析这个网站的视频网址。然后,各位都懂得,解析后的网址中有视频下载地址。还有个意外的小惊喜,那就是还有字幕可以下载,突然感觉这个网站好强大,我喜欢!

视频和字幕下载下来以后呢,就是合成了,这个就不细说了,找个视频编辑软件就可以实现了。

这里说了一堆废话了,可以忽略......

还有一个需要说明的是,这个视频网址是需要特殊方法才能访问的,一般情况下访问不了,懂得朋友可以露出会心一笑哈!这里主要介绍一下用Python来实现视频和字幕的下载,仅供学习参考用,不能访问的朋友可以去别的视频网站练练手哈。

2 功能及版本说明

功能:主要实现了视频和字幕的下载。

版本:v1.0

3 开发环境

Python3和PyCharm

4 网站分析

1) 标题信息

Python爬虫自学笔记:爬取某管网站视频及字幕

Python爬虫自学笔记:爬取某管网站视频及字幕

由上图可以看出,标题信息在标签

中,通过命令soup.h3.text提取标题信息。

2) 视频地址

Python爬虫自学笔记:爬取某管网站视频及字幕

Python爬虫自学笔记:爬取某管网站视频及字幕

如上图,选择下载高质量的视频,标签 中href属性包含视频的下载地址,可以通过soup.xxx.a.get('href')来获取。

3) 字幕地址

Python爬虫自学笔记:爬取某管网站视频及字幕

Python爬虫自学笔记:爬取某管网站视频及字幕

如上图,简体中文的字幕下载地址信息在标签的value属性中,通过soup.xxx.input.get('value')来获取。

5 编码思路

1) 提供视频网站地址;

2) 根据地址信息,整合成可实现视频解析的网站地址;

3) 请求网站;

4) 爬取标题信息;

5) 爬取视频下载地址,并实现下载;

6) 爬取字幕下载地址,并实现下载;

6 代码实现

Python爬虫自学笔记:爬取某管网站视频及字幕

Python爬虫自学笔记:爬取某管网站视频及字幕

Python爬虫自学笔记:爬取某管网站视频及字幕

代码运行效果如下:

Python爬虫自学笔记:爬取某管网站视频及字幕

Python爬虫自学笔记:爬取某管网站视频及字幕

好吧,写到这里贴图的时候发现下载文件的名称忘命名了......这里图片就不改了,在下面的具体代码中已更改添加了。

具体代码如下:

<code>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)

/<code>

7 相关学习知识点

1) 函数的定义,此次代码将各行命令整合到各个函数中,便于以后编写其他代码时可以调用;

2) 字符串的提取、添加、替换等命令;

3) 网站访问失败进行循环请求;

4) open()函数,实现下载功能;

5) 本地文件夹的创建os.makedirs();

6) 最主要的还是requests库的请求和BeautifulSoup库的页面解析。

8 结束语

本次代码实现了视频和字幕的下载功能,此次代码仅仅实现了单一视频和字幕的下载,后面会完善优化代码,实现多个或系列视频和字幕的下载。

有了爬虫后,就不用自己一个个手动去点下载视频,选择下载到本地的地址,再去点下载字幕,选择下载到本地的地址,只需输入视频网址即可。对于懒人的我来说,懒是我学习爬虫的动力,哈哈!

将此次编码的过程及源码分享给大家,供大家参考。对于错误的地方,或有更好的建议,希望大家指出来,不胜感激!


分享到:


相關文章: