国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python爬蟲--爬取嗶哩嗶哩(B站)短視頻平臺視頻

這篇具有很好參考價值的文章主要介紹了Python爬蟲--爬取嗶哩嗶哩(B站)短視頻平臺視頻。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

1、開發(fā)工具

2、第三方庫

3、實現(xiàn)思路

4.單個爬取B站視頻

5.批量爬取B站視頻

6.查找所需數(shù)據(jù)

結尾? ??


1、開發(fā)工具

Python3.9

pycharm

requests

和其他python內(nèi)置庫

2、第三方庫

安裝第三方庫

pip install requests

3、實現(xiàn)思路

1.用requests發(fā)送get請求,獲得下載鏈接

2.將下載到B站視頻和音頻保存到本地

3.使用ffmpeg來合并視頻和音頻。

4.并保存到本地。

4.單個爬取B站視頻
import os
import requests
import json
import re
from bs4 import BeautifulSoup
import subprocess
from detail_video import video_bvid

# video_bvid 是一個從外部得到的單個視頻ID
video_bvid = 'your-single-bvid'


class BilibiliVideoAudio:
    def __init__(self, bvid):
        self.bvid = bvid
        self.headers = {
            "referer": "https://search.bilibili.com/all?keyword=%E4%B8%BB%E6%92%AD%E8%AF%B4%E8%81%94%E6%92%AD&from_source=webtop_search&spm_id_from=333.1007&search_source=5&page=4&o=90",
            "origin": "https://search.bilibili.com",
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0',
            'Accept-Encoding': 'gzip, deflate, br'
        }

    def get_video_audio(self):
        # 構造視頻鏈接并發(fā)送請求獲取頁面內(nèi)容
        url = f'https://www.bilibili.com/video/{self.bvid}/?spm_id_from=333.337.search-card.all.click&vd_source=14378ecd144bed421affe1fe0ddd8981'
        content = requests.get(url, headers=self.headers).content.decode('utf-8')
        soup = BeautifulSoup(content, 'html.parser')

        # 獲取視頻標題
        meta_tag = soup.head.find('meta', attrs={'name': 'title'})
        title = meta_tag['content']

        # 獲取視頻和音頻鏈接
        pattern = r'window\.__playinfo__=({.*?})\s*</script>'
        json_data = re.findall(pattern, content)[0]
        data = json.loads(json_data)

        video_url = data['data']['dash']['video'][0]['base_url']
        audio_url = data['data']['dash']['audio'][0]['base_url']

        return {
            'title': title,
            'video_url': video_url,
            'audio_url': audio_url
        }

    def download_video_audio(self, url, filename):
        # 對文件名進行清理,去除不合規(guī)字符
        filename = self.sanitize_filename(filename)
        try:
            # 發(fā)送請求下載視頻或音頻文件
            resp = requests.get(url, headers=self.headers).content
            download_path = os.path.join('D:\\video', filename)  # 構造下載路徑
            with open(download_path, mode='wb') as file:
                file.write(resp)
            print("{:*^30}".format(f"下載完成:{filename}"))
        except Exception as e:
            print(e)

    def sanitize_filename(self, filename):
        # 定義不合規(guī)字符的正則表達式
        invalid_chars_regex = r'[\"*<>?\\|/:,]'

        # 替換不合規(guī)字符為空格
        sanitized_filename = re.sub(invalid_chars_regex, ' ', filename)

        return sanitized_filename

    def merge_video_audio(self, video_path, audio_path, output_path):
        """
        使用ffmpeg來合并視頻和音頻。
        """
        try:
            command = [
                'ffmpeg',
                '-y',  # 覆蓋輸出文件如果它已經(jīng)存在
                '-i', video_path,  # 輸入視頻路徑
                '-i', audio_path,  # 輸入音頻路徑
                '-c', 'copy',  # 復制原始數(shù)據(jù),不進行轉碼
                output_path  # 輸出視頻路徑
            ]
            subprocess.run(command, check=True)
            print(f"視頻和音頻合并完成:{output_path}")
        except subprocess.CalledProcessError as e:
            print(f"合并失敗: {e}")


def main():
   try:
        # 只處理一個 bvid
        bilibili = BilibiliVideoAudio(video_bvid)
        video_audio_info = bilibili.get_video_audio()
        
        title = video_audio_info['title']
        video_url = video_audio_info['video_url']
        audio_url = video_audio_info['audio_url']
        
        processed_videos_path = 'D:\\processed_videos'
        if not os.path.exists(processed_videos_path):
            os.makedirs(processed_videos_path)
        
        video_filename = f"{title}.mp4"
        audio_filename = f"{title}.mp3"
        output_filename = f"{title} - combined.mp4"
        
        video_file_path = os.path.join('D:\\video', video_filename)
        audio_file_path = os.path.join('D:\\video', audio_filename)
        output_file_path = os.path.join(processed_videos_path, output_filename)
        
        bilibili.download_video_audio(video_url, video_filename)  # 下載視頻
        bilibili.download_video_audio(audio_url, audio_filename)  # 下載音頻
        bilibili.merge_video_audio(video_file_path, audio_file_path, output_file_path)  # 合并視頻和音頻
        
        # Optional: Delete the separate files after merge
        # os.remove(video_file_path)
        # os.remove(audio_file_path)
        
    except Exception as ex:
        print(f"Failed to process video/audio for {video_bvid}: {ex}")

main()
    

5.批量爬取B站視頻
# 批量爬取b站上的視頻
import os
import requests
import json
import re
from bs4 import BeautifulSoup
import subprocess
from detail_video import video_bvid


class BilibiliVideoAudio:
    def __init__(self, bvid):
        self.bvid = bvid
        self.headers = {
            "referer": "https://search.bilibili.com/all?keyword=%E4%B8%BB%E6%92%AD%E8%AF%B4%E8%81%94%E6%92%AD&from_source=webtop_search&spm_id_from=333.1007&search_source=5&page=4&o=90",
            "origin": "https://search.bilibili.com",
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0',
            'Accept-Encoding': 'gzip, deflate, br'
        }

    def get_video_audio(self):
        # 構造視頻鏈接并發(fā)送請求獲取頁面內(nèi)容
        url = f'https://www.bilibili.com/video/{self.bvid}/?spm_id_from=333.337.search-card.all.click&vd_source=14378ecd144bed421affe1fe0ddd8981'
        content = requests.get(url, headers=self.headers).content.decode('utf-8')
        soup = BeautifulSoup(content, 'html.parser')

        # 獲取視頻標題
        meta_tag = soup.head.find('meta', attrs={'name': 'title'})
        title = meta_tag['content']

        # 獲取視頻和音頻鏈接
        pattern = r'window\.__playinfo__=({.*?})\s*</script>'
        json_data = re.findall(pattern, content)[0]
        data = json.loads(json_data)

        video_url = data['data']['dash']['video'][0]['base_url']
        audio_url = data['data']['dash']['audio'][0]['base_url']

        return {
            'title': title,
            'video_url': video_url,
            'audio_url': audio_url
        }

    def download_video_audio(self, url, filename):
        # 對文件名進行清理,去除不合規(guī)字符
        filename = self.sanitize_filename(filename)
        try:
            # 發(fā)送請求下載視頻或音頻文件
            resp = requests.get(url, headers=self.headers).content
            download_path = os.path.join('D:\\video', filename)  # 構造下載路徑
            with open(download_path, mode='wb') as file:
                file.write(resp)
            print("{:*^30}".format(f"下載完成:{filename}"))
        except Exception as e:
            print(e)

    def sanitize_filename(self, filename):
        # 定義不合規(guī)字符的正則表達式
        invalid_chars_regex = r'[\"*<>?\\|/:,]'

        # 替換不合規(guī)字符為空格
        sanitized_filename = re.sub(invalid_chars_regex, ' ', filename)

        return sanitized_filename

    def merge_video_audio(self, video_path, audio_path, output_path):
        """
        使用ffmpeg來合并視頻和音頻。
        """
        try:
            command = [
                'ffmpeg',
                '-y',  # 覆蓋輸出文件如果它已經(jīng)存在
                '-i', video_path,  # 輸入視頻路徑
                '-i', audio_path,  # 輸入音頻路徑
                '-c', 'copy',  # 復制原始數(shù)據(jù),不進行轉碼
                output_path  # 輸出視頻路徑
            ]
            subprocess.run(command, check=True)
            print(f"視頻和音頻合并完成:{output_path}")
        except subprocess.CalledProcessError as e:
            print(f"合并失敗: {e}")


def main():
    # 批量獲取多個視頻的bid
    bvids = [
        #      0             1              2               3
        "BV187411i7zw","BV1wi4y1E7E6","BV1Gz4y1X7vh","BV1Lh411d7Lw",    # 1
        #      4             5              6               7
        "BV1mJ411D7QB","BV1Z5411w7Xb","BV1op4y167kS","BV1Mp4y1p7Ck",    # 2
        #      8             9              10              11
        "BV1nJ41187Zy","BV1qb4y1Z7JK","BV1f5411379u","BV1kt4y1Q792",    # 3
        #      12             13             14             15
        "BV1Qy4y1e7kk","BV1T7411T7q6","BV1k64y1k7QL","BV1J5411c7Rw",    # 4
        #      16             17              18            19
        "BV1Db4y1y7yL","BV1cC4y1878T","BV11y4y1z7bY","BV1LJ411S7ML",    # 5
        #      20             21              22            23
        "BV1X54y1L7mt","BV1S64y1D7HM","BV1rK4y1d7mZ","BV1b64y1y7AE",    # 6
        #      24             25              26            27
        "BV1TK411F7MU","BV1HN411f7Em","BV1QA411x7KB","BV1pM4y1K7Ao",    # 7
        #      28             29             30             31
        "BV1os4y1s7Aw","BV1sv411e71L","BV1xZ4y1A7gn","BV1E3411B7Q3",    # 8
        #      32             33              34            35
        "BV1664y1d78D","BV1xv41177MR","BV13q4y1S7y1","BV1kJ411H7y8",    # 9
        #      36             37              38            39
        "BV1Cq4y1Z7pM","BV1Jf4y147U7","BV1az4y117h4","BV1gy4y1h7wS",    # 10
        ]


    for bvid in bvids:
        try:
            bilibili = BilibiliVideoAudio(bvid)
            video_audio_info = bilibili.get_video_audio()

            title = video_audio_info['title']
            video_url = video_audio_info['video_url']
            audio_url = video_audio_info['audio_url']

            bilibili.download_video_audio(video_url, f"{title}.mp4")  # 下載視頻
            bilibili.download_video_audio(audio_url, f"{title}.mp3")  # 下載音頻
        except Exception as ex:
            print(f"Failed to download video/audio for {bvid}: {ex}")

    processed_videos_path = 'D:\\processed_videos'
    if not os.path.exists(processed_videos_path):
        os.makedirs(processed_videos_path)
    
    # 注意:B站和其他短視頻平臺的視頻不同,需要分別下載視頻和音頻,最后將視頻和音頻拼接到一塊
    for bvid in bvids:
        try:
            bilibili = BilibiliVideoAudio(bvid)
            video_audio_info = bilibili.get_video_audio()

            title = video_audio_info['title']
            video_url = video_audio_info['video_url']
            audio_url = video_audio_info['audio_url']

            video_filename = f"{title}.mp4"
            audio_filename = f"{title}.mp3"
            output_filename = f"{title} - combined.mp4"

            video_file_path = os.path.join('D:\\video', video_filename)
            audio_file_path = os.path.join('D:\\video', audio_filename)
            output_file_path = os.path.join(processed_videos_path, output_filename)

            bilibili.download_video_audio(video_url, video_filename)  # 下載視頻
            bilibili.download_video_audio(audio_url, audio_filename)  # 下載音頻
            bilibili.merge_video_audio(video_file_path, audio_file_path, output_file_path)  # 合并視頻和音頻

            # Optional: Delete the separate files after merge
            # os.remove(video_file_path)
            # os.remove(audio_file_path)

        except Exception as ex:
            print(f"Failed to process video/audio for {bvid}: {ex}")


main()
6.查找所需數(shù)據(jù)

? ?1)bvid????b站視頻爬取,python爬蟲,python,爬蟲,開發(fā)語言

? ?2)referer /?origin /?User-Agent /?Accept-Encoding

? ?b站視頻爬取,python爬蟲,python,爬蟲,開發(fā)語言

結尾? ??

希望大家喜歡我的分享!!!

b站視頻爬取,python爬蟲,python,爬蟲,開發(fā)語言文章來源地址http://www.zghlxwxcb.cn/news/detail-836530.html

到了這里,關于Python爬蟲--爬取嗶哩嗶哩(B站)短視頻平臺視頻的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 基于Python的B站(嗶哩嗶哩)視頻評論采集,可破解反爬手段,想爬幾條爬幾條

    它通過輸入Bilibili視頻的av號、BV號或鏈接,然后使用指定的cookie和請求頭信息發(fā)送HTTP請求來獲取視頻的評論數(shù)據(jù)。然后,它將評論數(shù)據(jù)解析為CSV格式,并保存到指定的文件中。 具體實現(xiàn)過程如下: 導入所需的庫:requests用于發(fā)送HTTP請求,os用于操作文件路徑,time用于處理時

    2024年01月18日
    瀏覽(35)
  • 微信小程序仿嗶哩嗶哩視頻組件

    微信小程序仿嗶哩嗶哩視頻組件

    微信小程序仿照嗶哩嗶哩(包含源碼獲取) 效果如下圖 項目為簡單的小程序代碼片段,不包含后端,只通過原生的小程序語言開發(fā),使用官方原生的 video,沒有使用任何的第三方的組件庫, 需要的小伙伴可以自己獲取項目的源代碼,引入項目即可使用 視頻組件video是在官方

    2024年02月02日
    瀏覽(27)
  • 嗶哩嗶哩視頻合并 B站緩存視頻合并 安卓版 音視頻合并 基于ffmpeg

    嗶哩嗶哩視頻合并 B站緩存視頻合并 安卓版 音視頻合并 基于ffmpeg

    此軟件是為了幫助網(wǎng)友合并嗶哩嗶哩緩存視頻,Android上將bilibili緩存視頻合并導出為mp4,你可以將它理解為一個專用的格式工廠,并不涉及破解相關內(nèi)容,僅僅用于學習技術交流,嚴禁用于商業(yè)用途,如有侵權請聯(lián)系我刪檔,對你帶來困惑和不便我深感抱歉。 合并(導出)B站緩

    2024年02月02日
    瀏覽(30)
  • 嗶哩嗶哩 B站 bilibili 視頻倍速設置 視頻倍速可自定義

    嗶哩嗶哩 B站 bilibili 視頻倍速設置 視頻倍速可自定義

    目錄 一、復制如下代碼 二、在B站視頻播放頁面進入控制臺 (一)以火狐瀏覽器為例 ? ? ? ?? (二)以谷歌瀏覽器為例 三、將復制的代碼粘貼到下方輸入框,并 回車Enter 即可 (一)以火狐瀏覽器為例 ? ? ? ?? (二)以谷歌瀏覽器為例 ?四、然后就可以了 (該代碼用于

    2024年02月11日
    瀏覽(27)
  • Websocket獲取B站直播間彈幕教程 — 嗶哩嗶哩直播開放平臺

    進入 嗶哩嗶哩直播開放平臺:https://open-live.bilibili.com/ 注冊申請個人開發(fā)者認證,獲得access_key_id 和 access_key_secred 進入bilibili創(chuàng)作者服務中心 - 創(chuàng)建項目 - 獲得項目ID( app_id ) 官方文檔:https://open-live.bilibili.com/document/eba8e2e1-847d-e908-2e5c-7a1ec7d9266f 注意:Post參數(shù)需要簽名加密,

    2024年02月08日
    瀏覽(26)
  • 超級實用--解決大問題了--如何設置嗶哩嗶哩-實現(xiàn)3,4倍速視頻播放---工作技巧001

    超級實用--解決大問題了--如何設置嗶哩嗶哩-實現(xiàn)3,4倍速視頻播放---工作技巧001

    ? 這個太實用了,為什么....因為我平時看教程的時候,如果速度過慢,就會影響效率,因為很多的技術點 都已經(jīng)知道是怎么回事,很熟悉了,想跳過吧,又想聽聽熟悉一下,而如果一直用2倍速播放,又浪費時間 但是播放器上只能設置2倍速播放,那么怎么弄呢?可以這樣設置...總于知道怎么

    2024年02月12日
    瀏覽(21)
  • 【板栗糖GIS】——如何下載嗶哩嗶哩的視頻CC字幕為不帶時間節(jié)點的純文字

    【板栗糖GIS】——如何下載嗶哩嗶哩的視頻CC字幕為不帶時間節(jié)點的純文字

    【板栗糖GIS】——如何下載嗶哩嗶哩的視頻CC字幕為不帶時間節(jié)點的純文字 目錄 1. 打開edge瀏覽器或谷歌瀏覽器 2. 安裝油猴插件 3. 安裝字幕插件 4. 打開嗶哩嗶哩視頻播放頁面,點擊字幕 ????????首先在想要下載之前需要先判定視頻是否有云字幕,如果有才可以下載,如果

    2024年02月12日
    瀏覽(18)
  • Python爬蟲:爬取各種視頻

    Python爬蟲:爬取各種視頻

    一、先看效果: 包括短視頻 中視頻 長視頻等。 短視頻(2到3分鐘時間): 中視頻(10分鐘左右時間): 長視頻(20分鐘左右時間): 二、爬取規(guī)則: 2.1:短視頻爬?。?爬取該網(wǎng)頁視頻: 方法一:F12鍵?找到?network?然后media,數(shù)據(jù)包中的url,復制粘貼看是否能打開該視頻,如果能打

    2024年04月13日
    瀏覽(20)
  • 使用python爬蟲爬取bilibili視頻

    可以使用 Python 爬蟲框架如 Scrapy 來爬取 Bilibili 的視頻。首先需要了解 Bilibili 網(wǎng)站的構造,包括數(shù)據(jù)是如何呈現(xiàn)的,然后構建請求來獲取所需的數(shù)據(jù)。同時需要考慮反爬蟲措施,可能需要使用代理 IP 和 User-Agent 等方法來繞過反爬蟲機制。 這里提供一個簡單的爬取視頻標題的

    2024年02月08日
    瀏覽(16)
  • 嗶哩嗶哩緩存轉碼|FFmpeg將m4s文件轉為mp4|PHP自動批量轉碼B站視頻

    嗶哩嗶哩緩存轉碼|FFmpeg將m4s文件轉為mp4|PHP自動批量轉碼B站視頻

    打開ffMpeg官網(wǎng) 選擇window=Windows builds from gyan.dev 打開https://www.gyan.dev/ffmpeg/builds/ 這里是上面提取的下載鏈接如果過期不能用自己去官網(wǎng)下 上面下載的FFmpeg是綠色軟件,下載解壓到你的常用軟件安裝目錄即可,然后進入bin復制全路徑配置下系統(tǒng)環(huán)境變量即可 https://github.com/PHP-F

    2024年02月14日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包