Python爬取B站視頻:封裝一下

📚博客主頁:knighthood2001
?公眾號:認知up吧 (目前正在帶領大家一起提升認知,感興趣可以來圍觀一下)
🎃知識星球:【認知up吧|成長|副業】介紹
??如遇文章付費,可先看看我公眾號中是否發布免費文章??
🙏筆者水平有限,歡迎各位大佬指點,相互學習進步!

全部代碼

根據之前的文章,我們其實可以將其封裝一下:

import requests
import re
import json
import os
import subprocess
# 函數:下載并保存視頻和音頻
def download_video_and_audio(url, headers):try:# 發送請求response = requests.get(url=url, headers=headers)response.raise_for_status()  # 如果響應狀態不是200,將拋出異常html = response.text# 解析數據:提取視頻標題title = re.findall('title="(.*?)"', html)[0]print(f"視頻標題: {title}")# 解析視頻信息info = re.findall('window.__playinfo__=(.*?)</script>', html)[0]json_data = json.loads(info)# 提取視頻鏈接和音頻鏈接video_url = json_data['data']['dash']['video'][0]['baseUrl']audio_url = json_data['data']['dash']['audio'][0]['baseUrl']print(f"視頻鏈接: {video_url}")print(f"音頻鏈接: {audio_url}")# 下載視頻內容video_content = requests.get(url=video_url, headers=headers).content# 下載音頻內容audio_content = requests.get(url=audio_url, headers=headers).contentif not os.path.exists('process_video'):os.makedirs('process_video')# 保存視頻和音頻數據with open(f'process_video\\{title}.mp4', mode='wb') as v:v.write(video_content)with open(f'process_video\\{title}.mp3', mode='wb') as a:a.write(audio_content)print("視頻音頻下載完成!")return title  # 返回視頻標題except requests.exceptions.RequestException as e:print(f"請求錯誤: {e}")except json.JSONDecodeError:print("解析JSON時出錯")except Exception as e:print(f"發生錯誤: {e}")def merge_video(title):print("開始合并視頻...")if not os.path.exists('finally_video'):os.makedirs('finally_video')# 合并成完整的視頻內容cmd = f'ffmpeg -hide_banner -i "process_video\\{title}.mp4" -i "process_video\\{title}.mp3" -c:v copy -c:a aac -strict experimental "finally_video\\{title}output.mp4"'# 調用命令subprocess.run(cmd)if __name__ == '__main__':# url = 'https://www.bilibili.com/video/BV1jt421c7yN/'# url = 'https://www.bilibili.com/video/BV1vx421D7AP/?share_source=copy_web&vd_source=80a8f348074649de1e18f1345dee7db3'# url = 'https://www.bilibili.com/video/BV1LT421S7sh'url = 'https://www.bilibili.com/video/BV1H1421i7g6/?spm_id_from=333.999.0.0&vd_source=2ab95dfa6677af399778850be1824b83'cookie = "buvid3=2844B77E-F527-FB05-1DF5-9FDF834AE3E888277infoc; b_nut=1709986388; i-wanna-go-back=-1; b_ut=7; _uuid=6577D687-BED9-9AE2-106A10-551210627F5AC88087infoc; enable_web_push=DISABLE; buvid4=5ED5B3A0-A998-7D47-3815-9AD9A1B27A4989131-024030912-0Fw3r6dKwZLwPoWOl%2F8HuA%3D%3D; CURRENT_FNVAL=4048; rpdid=|(u|Jmkkuukk0J'u~u|ulR~)~; header_theme_version=CLOSE; fingerprint=c27c0b59dd10dcdc4c14701a58f49669; buvid_fp_plain=undefined; LIVE_BUVID=AUTO6217111182462626; FEED_LIVE_VERSION=V_WATCHLATER_PIP_WINDOW3; bp_video_offset_691902317=925084214145056785; DedeUserID=691902317; DedeUserID__ckMd5=ead312019baad7ed; CURRENT_QUALITY=80; home_feed_column=4; PVID=1; bili_ticket=eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MTY1NjYyODAsImlhdCI6MTcxNjMwNzAyMCwicGx0IjotMX0.4OcEc8xnUd8GPCTUkZM9UBejaRUnP0dhhjgL_DuFkgY; bili_ticket_expires=1716566220; SESSDATA=8abf5422%2C1731859084%2Ce2fa9%2A51CjD4mACI26GPIuH7wAe_rVLLXDq2VIckm2YvNvZpeMgzOMZCFVGss2CRvlLzxdOTmpASVk9nbUJtTU1QaWFqcUw1aWN5M19UMW0zdkhsZkdHRFdHdTZ1VVEzRUFmVUtKejhfS3FraFZ5WGM1OUstS1ZyeGRDTDhLM2Z1ekFuN09FcXFyaWIzWElnIIEC; bili_jct=ecb04e890e743862a38e01c7f37e08dd; bp_t_offset_691902317=934571401762832385; buvid_fp=c27c0b59dd10dcdc4c14701a58f49669; b_lsid=CB3EFD71_18FA63D003A; bmg_af_switch=1; bmg_src_def_domain=i0.hdslb.com; browser_resolution=675-639"headers = {"Referer": url,"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36","Cookie": cookie}# 調用函數title = download_video_and_audio(url, headers)merge_video(title)

并且針對之前沒有將視頻音頻合并,我這里也添加了這個功能。但是需要ffmpeg.exe,大家應該知道這是個音視頻處理工具,很多軟件,其實你下載下來,其中就會包含ffmpeg.exe。

在這里插入圖片描述
需要ffmpeg.exe的可以上網找找,也可以私信我。

下載視頻音頻

首先,我構造了下載視頻音頻的函數,并且用try expect進行解決報錯。

下載下來的視頻音頻都會保存在process_video文件夾中。

并且讀取title作為文件名稱。

合并視頻音頻

接著,我將視頻音頻進行讀取,并通過subprocess庫進行運行cmd命令,實現通過ffmpeg將視頻音頻合并到指定目錄下。

注意

  • 你需要更改你要爬取的視頻網址,以及更改cookie為你自己的cookie(cookie會過期,需要自己即使更新一下)。
  • 你需要ffmpeg.exe,這是實現視頻音頻合并的關鍵。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/14880.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/14880.shtml
英文地址,請注明出處:http://en.pswp.cn/web/14880.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大數據Hadoop之-工具HIVE(一)

大數據Hadoop之——數據倉庫Hive HIVE介紹Hive是基于Hadoop的一個數據倉庫(Data Aarehouse,簡稱數倉、DW),可以將結構化的數據文件映射為一張數據庫表,并提供類SQL查詢功能。是用于存儲、分析、報告的數據系統。 在Hadoop生態系統中,HDFS用于存儲數據,Yarn用于資源管理…

解釋Spring Bean的生命周期

Spring Bean的生命周期涉及到Bean的創建、配置、使用和銷毀的各個階段。理解這個生命周期對于編寫高效的Spring應用和充分利用框架的功能非常重要。下面是Spring Bean生命周期的主要步驟&#xff1a; 1. 實例化Bean Spring容器首先將使用Bean的定義&#xff08;無論是XML、注…

使用Golang調用騰訊云郵件模版發送郵件

文章目錄 一、騰訊云郵件模版創建1.1 發信域名配置1.2 發信地址設置1.3 發信模版設置 二、通過Golang發送郵件2.1 代碼示例2.2 代碼說明 三、常見問題3.1 UnsupportedRegion3.2 InvalidTemplateID 本文檔介紹了如何使用Golang編寫代碼&#xff0c;通過騰訊云郵件服務&#xff0…

【Linux】中的常見的重要指令(中)

目錄 一、man指令 二、cp指令 三、cat指令 四、mv指令 五、more指令 六、less指令 七、head指令 八、tail指令 一、man指令 Linux的命令有很多參數&#xff0c;我們不可能全記住&#xff0c;我們可以通過查看聯機手冊獲取幫助。訪問Linux手冊頁的命令是 man 語法: m…

白嫖免費圖床!CloudFlare R2太香了!

1 為啥要折騰搭建一個專屬圖床&#xff1f; 技術大佬寫博客都用 md 格式&#xff0c;要在多平臺發布&#xff0c;圖片就得有外鏈后續如博客遷移&#xff0c;國內博客網站如掘金&#xff0c;簡書&#xff0c;語雀等都做了防盜鏈&#xff0c;圖片無法遷移 2 為啥選擇CloudFlare…

對話太醫管家CEO徐晶:數字化技術正在為健康管理行業帶來新平衡丨數字思考者50人...

ITValue 鈦媒體特別專題策劃《數字思考者50人》&#xff1a;探訪中國深刻的數字化思考者群體。我們理解的“TechThinker”&#xff0c;涵蓋了中國數字化浪潮中的技術踐行者、政策制定者與投資決策者。在這場長達10年的乘風破浪中&#xff0c;每個人都在分享技術進步的果實&…

leetcode445-Add Two Numbers II

題目 給你兩個 非空 鏈表來代表兩個非負整數。數字最高位位于鏈表開始位置。它們的每個節點只存儲一位數字。將這兩數相加會返回一個新的鏈表。 你可以假設除了數字 0 之外&#xff0c;這兩個數字都不會以零開頭。 示例1&#xff1a; 輸入&#xff1a;l1 [7,2,4,3], l2 [5,6…

文件系統--軟硬鏈接

文章目錄 現象軟鏈接硬鏈接 現象 建立軟鏈接 建立硬鏈接 // 刪除軟硬鏈接都可以用 unlink 指令 unlink soft-link軟鏈接 軟鏈接是一個獨立的文件&#xff0c;因為有獨立的inode number 軟鏈接的內容&#xff1a;目標文件所對應的路勁字符串如果我們直接查看軟鏈接文件&#…

vue2vue3為什么el-table樹狀表格失效?

上圖所示&#xff0c;后端返回字段中有hasChildren字段。 解決樹狀表格失效方案&#xff1a; 從后端拿到數據后&#xff0c;遞歸去掉該字段&#xff0c;然后就能正常顯示。&#xff08;復制下方代碼&#xff0c;直接用&#xff09; 親測有效&#xff0c;vue2、vue3通用 /**…

如何運用多媒體,打造企業實力展示廳?

企業文化、產品是其長期發展的根本所在&#xff0c;為此越來越多的企業開始選擇運用多媒體互動&#xff0c;來打造企業多媒體展廳的方式&#xff0c;對企業文化、品牌形象、產品進行推廣宣傳&#xff0c;并在多媒體互動裝置的支持下&#xff0c;能讓客戶能夠快速且全面的了解企…

基于SSM的“酒店管理系統”的設計與實現(源碼+數據庫+文檔)

基于SSM的“酒店管理系統”的設計與實現&#xff08;源碼數據庫文檔) 開發語言&#xff1a;Java 數據庫&#xff1a;MySQL 技術&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系統展示 首頁 管理員登錄頁面 用戶管理頁面 客房信息查詢 酒店詳細信息 后臺…

MySQL入門學習.數據庫組成.存儲引擎

存儲引擎是 MySQL 數據庫的一個重要組成部分&#xff0c;它決定了數據的存儲方式、索引方式、事務支持等特性。MySQL 支持多種存儲引擎&#xff0c;常見的有 InnoDB、MyISAM、Memory 等。 存儲引擎的特點和使用方法&#xff1a; 1. InnoDB&#xff1a; 是 MySQL 默認的存儲引…

APP廣告變現怎么實現的,背后邏輯是什么?

廣告變現的實現主要基于以下幾個關鍵步驟和邏輯&#xff1a; 用戶獲取與留存&#xff1a;首先&#xff0c;APP需要吸引足夠的用戶并確保他們的留存率。只有擁有龐大且活躍的用戶基礎&#xff0c;APP才能吸引廣告商投放廣告。因此&#xff0c;開發者需要通過優化APP質量、提升用…

數字人實訓室解決方案

前言 近年來&#xff0c;政策層面的積極推動為數字人產業鋪設了堅實的基石。2021年&#xff0c;“十四五”規劃將虛擬數字技術納入其中&#xff0c;強調技術創新引領行業應用的革新&#xff0c;加速數字人在各領域的實際應用。緊接著的《“十四五”數字經濟發展規劃》進一步明確…

react封裝Spin重復使用loading效果antd

1. 代碼封裝 import React, { useState } from react; import { Spin } from antd; import ./index.scss;// 自定義Hook useLoadings export const useLoadings () > {// 存儲loading的狀態&#xff0c;key是loading的唯一標識&#xff0c;value是loading的顯示狀態 co…

c#將json字符串轉為對象

c#將json字符串轉為對象&#xff0c;需要加載這個 using Newtonsoft.Json; Rootobject _r JsonConvert.DeserializeObject<Rootobject>(_json);

selenium 庫的爬蟲實現

selenium 是什么&#xff1f; Selenium 是一個用于自動化 Web 應用程序測試的工具。它提供了一個用于測試網站的框架&#xff0c;可以模擬用戶在瀏覽器中的操作&#xff0c;如點擊鏈接、填寫表單、提交數據等。Selenium 可以在多種瀏覽器和操作系統上運行&#xff0c;并且支持…

Nodejs 第七十三章(網關層)

什么是網關層(getway)&#xff1f; 技術選型fastify 速度快適合網關層 fastify教程上一章有講 網關層是位于客戶端和后端服務之間的中間層&#xff0c;用于處理和轉發請求。它充當了請求的入口點&#xff0c;并負責將請求路由到適當的后端服務&#xff0c;并將后端服務的響應…

一個基于HOOK機制的微信機器人

一個基于?HOOK機制的微信機器人&#xff0c;支持&#x1f331;安全新聞定時推送【FreeBuf&#xff0c;先知&#xff0c;安全客&#xff0c;奇安信攻防社區】&#xff0c;&#x1f46f;Kfc文案&#xff0c;?備案查詢&#xff0c;?手機號歸屬地查詢&#xff0c;?WHOIS信息查詢…

有哪些地圖采集軟件可以采集商家數據導出功能?

1.國內商家采集 寅甲地圖數據采集軟件 寅甲地圖數據采集軟件一款多關鍵詞多城市同時采集百度地圖、360地圖、高德地圖、搜狗地圖、騰訊地圖、圖吧地圖、天地圖商家、公司、店鋪的手機、座機、地址、坐標等數據信息的軟件。 2.國外商家采集 寅甲谷歌地圖數據采集軟件 專為做…