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 結束語

本次代碼實現了視頻和字幕的下載功能,此次代碼僅僅實現了單一視頻和字幕的下載,後面會完善優化代碼,實現多個或系列視頻和字幕的下載。

有了爬蟲後,就不用自己一個個手動去點下載視頻,選擇下載到本地的地址,再去點下載字幕,選擇下載到本地的地址,只需輸入視頻網址即可。對於懶人的我來說,懶是我學習爬蟲的動力,哈哈!

將此次編碼的過程及源碼分享給大家,供大家參考。對於錯誤的地方,或有更好的建議,希望大家指出來,不勝感激!


分享到:


相關文章: