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

python下載bilibili視頻,下載合集,下載選集

這篇具有很好參考價值的文章主要介紹了python下載bilibili視頻,下載合集,下載選集。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

一. 內(nèi)容簡介

python下載bilibili視頻合集

二. 軟件環(huán)境

2.1vsCode

2.2Anaconda

version: conda 22.9.0

2.3代碼

鏈接:https://pan.baidu.com/s/1WuXTso_iltLlnrLffi1kYQ?pwd=1234

三.主要流程

3.1 下載單個視頻

感覺現(xiàn)在下載的清晰度不夠,可以在找找,給這塊替換了就行
代碼

import requests
import os
from lxml import etree
import re

def videoDownload1(url_):
    # 設(shè)置用戶代理,cookie
    headers_ = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
        'Cookie': "buvid3=7014DDC0-BF1E-B121-F5A5-F10753C840B423630infoc; i-wanna-go-back=-1; _uuid=49BF2138-1E10F-D5F5-10898-D8311651B53927883infoc; FEED_LIVE_VERSION=V8; DedeUserID=171300042; DedeUserID__ckMd5=c65bec3211413192; CURRENT_FNVAL=4048; rpdid=|(J|)J~m~llk0J'uYm|)~klRl; header_theme_version=CLOSE; hit-new-style-dyn=1; hit-dyn-v2=1; is-2022-channel=1; fingerprint=fe5c7462625770aa2abce449a7c01fd2; buvid_fp_plain=undefined; b_nut=1691207170; b_ut=5; buvid_fp=fe5c7462625770aa2abce449a7c01fd2; LIVE_BUVID=AUTO4016915564967297; buvid4=1AE73807-AEA0-7078-DA57-7F9FE5C3D6F896987-023080912-A0g5nInZwV3VmJJT68FJxw%3D%3D; home_feed_column=5; SESSDATA=fc1266d3%2C1708653865%2C29c08%2A81-i-T9HQrucvpCVcPwSwXl5LmjTyduIzF9veu0KS9i2IwXK_xkcqlt1XQyxJ3sG-9HMSwLwAAKgA; bili_jct=068bc0a79f3fa7aa1a030e478dbf6d4b; sid=5yvjlnfi; browser_resolution=1920-971; bili_ticket=eyJhbGciOiJFUzM4NCIsImtpZCI6ImVjMDIiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2OTMzNjY1MTcsImlhdCI6MTY5MzEwNzMxNywicGx0IjotMX0.I1Yfp8S9UIkU4S0G5vtBJfslPtgY7QLCj1dx9WQpyRmxKpZoA1qB5UYXNW4KBSZFGljMm7F1lbGXSGco7F79JZJ2sZNBvH9QiSVlmipzAJKaucIoFh6s3m1jpqjLp10r; bili_ticket_expires=1693366517; bp_video_offset_171300042=834376858445283367; b_lsid=1021245DB_18A3567E5C2; CURRENT_QUALITY=80; PVID=2"
    }

    # 發(fā)送請求,得到響應(yīng)對象
    response_ = requests.get(url_, headers=headers_)

    str_data = response_.text  # 視頻主頁的html代碼,類型是字符串

    # 使用xpath解析html代碼,,得到想要的url
    html_obj = etree.HTML(str_data)  # 轉(zhuǎn)換格式類型

    # 獲取視頻的名稱
    res_ = html_obj.xpath('//title/text()')[0]
    # 視頻名稱的獲取
    title_ = re.findall(r'(.*?)_嗶哩嗶哩', res_)[0]
    # 影響視頻合成的特殊字符的處理,目前就遇到過這三個,實(shí)際上很有可能不止這三個,遇到了就用同樣的方法處理就好了
    title_ = title_.replace('/', '')
    title_ = title_.replace(' ', '')
    title_ = title_.replace('&', '')
    title_ = title_.replace(':', '')

    # 使用xpath語法獲取數(shù)據(jù),取到數(shù)據(jù)為列表,索引[0]取值取出里面的字符串,即包含視頻音頻文件的url字符串
    url_list_str = html_obj.xpath('//script[contains(text(),"window.__playinfo__")]/text()')[0]

    # 純視頻的url
    video_url = re.findall(r'"video":\[{"id":\d+,"baseUrl":"(.*?)"', url_list_str)[0]

    # 純音頻的url
    audio_url = re.findall(r'"audio":\[{"id":\d+,"baseUrl":"(.*?)"', url_list_str)[0]

    # 設(shè)置跳轉(zhuǎn)字段的headers
    headers_ = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36',
        'Referer': url_
    }

    # 獲取純視頻的數(shù)據(jù)
    response_video = requests.get(video_url, headers=headers_, stream=True)
    bytes_video = response_video.content
    # 獲取純音頻的數(shù)據(jù)
    response_audio = requests.get(audio_url, headers=headers_, stream=True)
    bytes_audio = response_audio.content

    # 獲取文件大小, 單位為KB
    video_size = int(int(response_video.headers['content-length']) / 1024)
    audio_size = int(int(response_audio.headers['content-length']) / 1024)

    # 保存純視頻的文件
    title_1 = title_ + '!'  # 名稱進(jìn)行修改,避免重名
    title_1 = title_1.replace(':', '_')
    
    with open(f'{title_1}.mp4', 'wb') as f:
        f.write(bytes_video)
        # print(f'{title_1}純視頻文件下載完畢...,大小為:{video_size}KB, {int(video_size/1024)}MB')

    with open(f'{title_1}.mp3', 'wb') as f:
        f.write(bytes_audio)
        # print(f'{title_1}純音頻文件下載完畢...,大小為:{audio_size}KB, {int(audio_size/1024)}MB')

        # 利用第三方工具ffmpeg 合成視頻, 需要執(zhí)行終端命令
    ffmpeg_path = r".\ffmpeg\bin\ffmpeg.exe"
    # os.system(f'{ffmpeg_path} -i {title_1}.mp3 -i {title_1}.mp4 -c copy .\video\{title_}.mp4 -loglevel quiet')


    folder_path = f"./video/{title_}"  # 替換為你想要創(chuàng)建的文件夾路徑

    if not os.path.exists(folder_path):
        os.mkdir(folder_path)
        # print(f"The folder '{folder_path}' already exists.")


    command = f'{ffmpeg_path} -i {title_1}.mp3 -i {title_1}.mp4 -c copy ./video/{title_}/{title_}.mp4 -loglevel quiet'

    os.system(command)


    # 顯示合成文件的大小

    print(f'{title_}  下載完成')

    # 移除純視頻文件,
    os.remove(f'{title_1}.mp4')
    # 移除純音頻文件,
    os.remove(f'{title_1}.mp3')

3.2 下載選集視頻

選集視頻的播放鏈接很好找,就是后面的p=幾啥的,拼一下就可以拿到整個的播放鏈接了
代碼

import requests
import os
from lxml import etree
import re

# 獲取網(wǎng)頁源碼
def getUrls2(url):
    # 發(fā)送請求,得到響應(yīng)對象
        # 設(shè)置用戶代理,cookie
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
        'Cookie': "buvid3=7014DDC0-BF1E-B121-F5A5-F10753C840B423630infoc; i-wanna-go-back=-1; _uuid=49BF2138-1E10F-D5F5-10898-D8311651B53927883infoc; FEED_LIVE_VERSION=V8; DedeUserID=171300042; DedeUserID__ckMd5=c65bec3211413192; CURRENT_FNVAL=4048; rpdid=|(J|)J~m~llk0J'uYm|)~klRl; header_theme_version=CLOSE; hit-new-style-dyn=1; hit-dyn-v2=1; is-2022-channel=1; fingerprint=fe5c7462625770aa2abce449a7c01fd2; buvid_fp_plain=undefined; b_nut=1691207170; b_ut=5; buvid_fp=fe5c7462625770aa2abce449a7c01fd2; LIVE_BUVID=AUTO4016915564967297; buvid4=1AE73807-AEA0-7078-DA57-7F9FE5C3D6F896987-023080912-A0g5nInZwV3VmJJT68FJxw%3D%3D; home_feed_column=5; SESSDATA=fc1266d3%2C1708653865%2C29c08%2A81-i-T9HQrucvpCVcPwSwXl5LmjTyduIzF9veu0KS9i2IwXK_xkcqlt1XQyxJ3sG-9HMSwLwAAKgA; bili_jct=068bc0a79f3fa7aa1a030e478dbf6d4b; sid=5yvjlnfi; browser_resolution=1920-971; bili_ticket=eyJhbGciOiJFUzM4NCIsImtpZCI6ImVjMDIiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2OTMzNjY1MTcsImlhdCI6MTY5MzEwNzMxNywicGx0IjotMX0.I1Yfp8S9UIkU4S0G5vtBJfslPtgY7QLCj1dx9WQpyRmxKpZoA1qB5UYXNW4KBSZFGljMm7F1lbGXSGco7F79JZJ2sZNBvH9QiSVlmipzAJKaucIoFh6s3m1jpqjLp10r; bili_ticket_expires=1693366517; bp_video_offset_171300042=834376858445283367; b_lsid=1021245DB_18A3567E5C2; CURRENT_QUALITY=80; PVID=2"
    }
    response_ = requests.get(url, headers=headers)

    str_data = response_.text  # 視頻主頁的html代碼,類型是字符串

    # 使用xpath解析html代碼,,得到想要的url
    html_obj = etree.HTML(str_data)  # 轉(zhuǎn)換格式類型
    urls = []
    # 獲取了li的數(shù)量,
    lis = html_obj.xpath("http://ul[@class='list-box']/li")
    question_mark_index = url.find('?')

    # 如果找到了 '?',就截取該位置之前的子串
    if question_mark_index != -1:
        cleaned_url = url[:question_mark_index]
    else:
        cleaned_url = url
    # print(cleaned_url)
    # 拼接api
    for i in range(1,len(lis)+1):
        # print(i)
        strs = cleaned_url + "?p=" + str(i)
        urls.append(strs)

    # print(content)
    return urls
import requests
import os
from lxml import etree
import re

def videoDownload3(url_,i,name):
    # 設(shè)置用戶代理,cookie
    headers_ = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
        'Cookie': "buvid3=7014DDC0-BF1E-B121-F5A5-F10753C840B423630infoc; i-wanna-go-back=-1; _uuid=49BF2138-1E10F-D5F5-10898-D8311651B53927883infoc; FEED_LIVE_VERSION=V8; DedeUserID=171300042; DedeUserID__ckMd5=c65bec3211413192; CURRENT_FNVAL=4048; rpdid=|(J|)J~m~llk0J'uYm|)~klRl; header_theme_version=CLOSE; hit-new-style-dyn=1; hit-dyn-v2=1; is-2022-channel=1; fingerprint=fe5c7462625770aa2abce449a7c01fd2; buvid_fp_plain=undefined; b_nut=1691207170; b_ut=5; buvid_fp=fe5c7462625770aa2abce449a7c01fd2; LIVE_BUVID=AUTO4016915564967297; buvid4=1AE73807-AEA0-7078-DA57-7F9FE5C3D6F896987-023080912-A0g5nInZwV3VmJJT68FJxw%3D%3D; home_feed_column=5; SESSDATA=fc1266d3%2C1708653865%2C29c08%2A81-i-T9HQrucvpCVcPwSwXl5LmjTyduIzF9veu0KS9i2IwXK_xkcqlt1XQyxJ3sG-9HMSwLwAAKgA; bili_jct=068bc0a79f3fa7aa1a030e478dbf6d4b; sid=5yvjlnfi; browser_resolution=1920-971; bili_ticket=eyJhbGciOiJFUzM4NCIsImtpZCI6ImVjMDIiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2OTMzNjY1MTcsImlhdCI6MTY5MzEwNzMxNywicGx0IjotMX0.I1Yfp8S9UIkU4S0G5vtBJfslPtgY7QLCj1dx9WQpyRmxKpZoA1qB5UYXNW4KBSZFGljMm7F1lbGXSGco7F79JZJ2sZNBvH9QiSVlmipzAJKaucIoFh6s3m1jpqjLp10r; bili_ticket_expires=1693366517; bp_video_offset_171300042=834376858445283367; b_lsid=1021245DB_18A3567E5C2; CURRENT_QUALITY=80; PVID=2"
    }

    # 發(fā)送請求,得到響應(yīng)對象
    response_ = requests.get(url_, headers=headers_)

    str_data = response_.text  # 視頻主頁的html代碼,類型是字符串

    # 使用xpath解析html代碼,,得到想要的url
    html_obj = etree.HTML(str_data)  # 轉(zhuǎn)換格式類型

    # 獲取視頻的名稱
    res_ = html_obj.xpath('//title/text()')[0]
    # 視頻名稱的獲取
    title_ = re.findall(r'(.*?)_嗶哩嗶哩', res_)[0]
    
    fileName = name
    # 影響視頻合成的特殊字符的處理,目前就遇到過這三個,實(shí)際上很有可能不止這三個,遇到了就用同樣的方法處理就好了
    title_ = title_.replace('/', '')
    title_ = title_.replace(' ', '')
    title_ = title_.replace('&', '')
    title_ = title_.replace(':', '')
    title_ = title_.replace('-', '')
    title_ = title_.replace('—', '')
    # 使用xpath語法獲取數(shù)據(jù),取到數(shù)據(jù)為列表,索引[0]取值取出里面的字符串,即包含視頻音頻文件的url字符串
    url_list_str = html_obj.xpath('//script[contains(text(),"window.__playinfo__")]/text()')[0]

    # 純視頻的url
    video_url = re.findall(r'"video":\[{"id":\d+,"baseUrl":"(.*?)"', url_list_str)[0]

    # 純音頻的url
    audio_url = re.findall(r'"audio":\[{"id":\d+,"baseUrl":"(.*?)"', url_list_str)[0]

    # 設(shè)置跳轉(zhuǎn)字段的headers
    headers_ = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36',
        'Referer': url_
    }

    # 獲取純視頻的數(shù)據(jù)
    response_video = requests.get(video_url, headers=headers_, stream=True)
    bytes_video = response_video.content
    # 獲取純音頻的數(shù)據(jù)
    response_audio = requests.get(audio_url, headers=headers_, stream=True)
    bytes_audio = response_audio.content

    # 獲取文件大小, 單位為KB
    video_size = int(int(response_video.headers['content-length']) / 1024)
    audio_size = int(int(response_audio.headers['content-length']) / 1024)

    # 保存純視頻的文件
    title_1 = title_ + '!'  # 名稱進(jìn)行修改,避免重名
    title_1 = title_1.replace(':', '')
    with open(f'{title_1}.mp4', 'wb') as f:
        f.write(bytes_video)
        # print(f'{title_1}純視頻文件下載完畢...,大小為:{video_size}KB, {int(video_size/1024)}MB')

    with open(f'{title_1}.mp3', 'wb') as f:
        f.write(bytes_audio)
        # print(f'{title_1}純音頻文件下載完畢...,大小為:{audio_size}KB, {int(audio_size/1024)}MB')

        # 利用第三方工具ffmpeg 合成視頻, 需要執(zhí)行終端命令
    ffmpeg_path = r".\ffmpeg\bin\ffmpeg.exe"
    # os.system(f'{ffmpeg_path} -i {title_1}.mp3 -i {title_1}.mp4 -c copy .\video\{title_}.mp4 -loglevel quiet')

    folder_path = f"./video/{fileName}"  # 替換為你想要創(chuàng)建的文件夾路徑
    if not os.path.exists(folder_path):
        os.mkdir(folder_path)
        # print(f"The folder '{folder_path}' already exists.")

    command = f'{ffmpeg_path} -i {title_1}.mp3 -i {title_1}.mp4 -c copy ./video/{fileName}/{i}.{title_1}.mp4 -loglevel quiet'

    file_path = f"./video/{fileName}/{i}.{title_}.mp4"
    if os.path.exists(file_path):
        pass
    else:
        os.system(command)

    # 顯示合成文件的大小

    print(f'{i}.{title_}  下載完成')

    # 移除純視頻文件,
    os.remove(f'{title_1}.mp4')
    # 移除純音頻文件,
    os.remove(f'{title_1}.mp3')

3.3 下載合集視頻

合集的里面數(shù)據(jù)的訪問api
python下載bilibili視頻,下載合集,下載選集,python,python,爬蟲
合集里面的數(shù)據(jù),就是從這個里面拿到播放id,給json中的處理拿出來,拼接視頻播放鏈接
python下載bilibili視頻,下載合集,下載選集,python,python,爬蟲

代碼

# 獲取網(wǎng)頁源碼
def getUrls3(url):
    # 發(fā)送請求,得到響應(yīng)對象
        # 設(shè)置用戶代理,cookie
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
        'Cookie': "buvid3=7014DDC0-BF1E-B121-F5A5-F10753C840B423630infoc; i-wanna-go-back=-1; _uuid=49BF2138-1E10F-D5F5-10898-D8311651B53927883infoc; FEED_LIVE_VERSION=V8; DedeUserID=171300042; DedeUserID__ckMd5=c65bec3211413192; CURRENT_FNVAL=4048; rpdid=|(J|)J~m~llk0J'uYm|)~klRl; header_theme_version=CLOSE; hit-new-style-dyn=1; hit-dyn-v2=1; is-2022-channel=1; fingerprint=fe5c7462625770aa2abce449a7c01fd2; buvid_fp_plain=undefined; b_nut=1691207170; b_ut=5; buvid_fp=fe5c7462625770aa2abce449a7c01fd2; LIVE_BUVID=AUTO4016915564967297; buvid4=1AE73807-AEA0-7078-DA57-7F9FE5C3D6F896987-023080912-A0g5nInZwV3VmJJT68FJxw%3D%3D; home_feed_column=5; SESSDATA=fc1266d3%2C1708653865%2C29c08%2A81-i-T9HQrucvpCVcPwSwXl5LmjTyduIzF9veu0KS9i2IwXK_xkcqlt1XQyxJ3sG-9HMSwLwAAKgA; bili_jct=068bc0a79f3fa7aa1a030e478dbf6d4b; sid=5yvjlnfi; browser_resolution=1920-971; bili_ticket=eyJhbGciOiJFUzM4NCIsImtpZCI6ImVjMDIiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2OTMzNjY1MTcsImlhdCI6MTY5MzEwNzMxNywicGx0IjotMX0.I1Yfp8S9UIkU4S0G5vtBJfslPtgY7QLCj1dx9WQpyRmxKpZoA1qB5UYXNW4KBSZFGljMm7F1lbGXSGco7F79JZJ2sZNBvH9QiSVlmipzAJKaucIoFh6s3m1jpqjLp10r; bili_ticket_expires=1693366517; bp_video_offset_171300042=834376858445283367; b_lsid=1021245DB_18A3567E5C2; CURRENT_QUALITY=80; PVID=2"
    }
    # 使用正則表達(dá)式提取數(shù)字
    pattern = r'\d+'
    numbers = re.findall(pattern, url)
    mid = numbers[0]
    season_id = numbers[1]
    page_num = 1
    url = f"https://api.bilibili.com/x/polymer/web-space/seasons_archives_list?mid={mid}&season_id={season_id}&sort_reverse=false&page_num={page_num}&page_size=30"
    response = requests.get(url)

    if response.status_code == 200:
        json_data = response.json()
        # print(json_data["data"]["page"]["total"])
        total = int(json_data["data"]["page"]["total"])
        page_size = int(json_data["data"]["page"]["page_size"])
        page = int(total / page_size) + 1
        name = json_data["data"]["meta"]["name"]
        # print(total,page)
    
    urls = []
    # 
    for i in range(1,page+1):
        # print(i) 
        url = f"https://api.bilibili.com/x/polymer/web-space/seasons_archives_list?mid={mid}&season_id={season_id}&sort_reverse=false&page_num={i}&page_size=30"
        response = requests.get(url)
        if response.status_code == 200:
            json_data = response.json()
            archives = json_data["data"]["archives"]
            num = 0
            for j in archives:
                bvid = archives[num]["bvid"]
                videoUrl = f"https://www.bilibili.com/video/{bvid}/"
                num = num + 1
                urls.append(videoUrl)
    return urls,name

import requests
import os
from lxml import etree
import re

def videoDownload2(url_,i):
    # 設(shè)置用戶代理,cookie
    headers_ = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
        'Cookie': "buvid3=7014DDC0-BF1E-B121-F5A5-F10753C840B423630infoc; i-wanna-go-back=-1; _uuid=49BF2138-1E10F-D5F5-10898-D8311651B53927883infoc; FEED_LIVE_VERSION=V8; DedeUserID=171300042; DedeUserID__ckMd5=c65bec3211413192; CURRENT_FNVAL=4048; rpdid=|(J|)J~m~llk0J'uYm|)~klRl; header_theme_version=CLOSE; hit-new-style-dyn=1; hit-dyn-v2=1; is-2022-channel=1; fingerprint=fe5c7462625770aa2abce449a7c01fd2; buvid_fp_plain=undefined; b_nut=1691207170; b_ut=5; buvid_fp=fe5c7462625770aa2abce449a7c01fd2; LIVE_BUVID=AUTO4016915564967297; buvid4=1AE73807-AEA0-7078-DA57-7F9FE5C3D6F896987-023080912-A0g5nInZwV3VmJJT68FJxw%3D%3D; home_feed_column=5; SESSDATA=fc1266d3%2C1708653865%2C29c08%2A81-i-T9HQrucvpCVcPwSwXl5LmjTyduIzF9veu0KS9i2IwXK_xkcqlt1XQyxJ3sG-9HMSwLwAAKgA; bili_jct=068bc0a79f3fa7aa1a030e478dbf6d4b; sid=5yvjlnfi; browser_resolution=1920-971; bili_ticket=eyJhbGciOiJFUzM4NCIsImtpZCI6ImVjMDIiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2OTMzNjY1MTcsImlhdCI6MTY5MzEwNzMxNywicGx0IjotMX0.I1Yfp8S9UIkU4S0G5vtBJfslPtgY7QLCj1dx9WQpyRmxKpZoA1qB5UYXNW4KBSZFGljMm7F1lbGXSGco7F79JZJ2sZNBvH9QiSVlmipzAJKaucIoFh6s3m1jpqjLp10r; bili_ticket_expires=1693366517; bp_video_offset_171300042=834376858445283367; b_lsid=1021245DB_18A3567E5C2; CURRENT_QUALITY=80; PVID=2"
    }

    # 發(fā)送請求,得到響應(yīng)對象
    response_ = requests.get(url_, headers=headers_)

    str_data = response_.text  # 視頻主頁的html代碼,類型是字符串

    # 使用xpath解析html代碼,,得到想要的url
    html_obj = etree.HTML(str_data)  # 轉(zhuǎn)換格式類型

    # 獲取視頻的名稱
    res_ = html_obj.xpath('//title/text()')[0]
    # 視頻名稱的獲取
    title_ = re.findall(r'(.*?)_嗶哩嗶哩', res_)[0]
    
    fileName = html_obj.xpath('//h1[@class="video-title"]/text()')[0]
    
    # 影響視頻合成的特殊字符的處理,目前就遇到過這三個,實(shí)際上很有可能不止這三個,遇到了就用同樣的方法處理就好了
    title_ = title_.replace('/', '')
    title_ = title_.replace(' ', '')
    title_ = title_.replace('&', '')
    title_ = title_.replace(':', '')

    # 使用xpath語法獲取數(shù)據(jù),取到數(shù)據(jù)為列表,索引[0]取值取出里面的字符串,即包含視頻音頻文件的url字符串
    url_list_str = html_obj.xpath('//script[contains(text(),"window.__playinfo__")]/text()')[0]

    # 純視頻的url
    video_url = re.findall(r'"video":\[{"id":\d+,"baseUrl":"(.*?)"', url_list_str)[0]

    # 純音頻的url
    audio_url = re.findall(r'"audio":\[{"id":\d+,"baseUrl":"(.*?)"', url_list_str)[0]

    # 設(shè)置跳轉(zhuǎn)字段的headers
    headers_ = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36',
        'Referer': url_
    }

    # 獲取純視頻的數(shù)據(jù)
    response_video = requests.get(video_url, headers=headers_, stream=True)
    bytes_video = response_video.content
    # 獲取純音頻的數(shù)據(jù)
    response_audio = requests.get(audio_url, headers=headers_, stream=True)
    bytes_audio = response_audio.content

    # 獲取文件大小, 單位為KB
    video_size = int(int(response_video.headers['content-length']) / 1024)
    audio_size = int(int(response_audio.headers['content-length']) / 1024)

    # 保存純視頻的文件
    title_1 = title_ + '!'  # 名稱進(jìn)行修改,避免重名
    title_1 = title_1.replace(':', '_')
    with open(f'{title_1}.mp4', 'wb') as f:
        f.write(bytes_video)
        # print(f'{title_1}純視頻文件下載完畢...,大小為:{video_size}KB, {int(video_size/1024)}MB')

    with open(f'{title_1}.mp3', 'wb') as f:
        f.write(bytes_audio)
        # print(f'{title_1}純音頻文件下載完畢...,大小為:{audio_size}KB, {int(audio_size/1024)}MB')

        # 利用第三方工具ffmpeg 合成視頻, 需要執(zhí)行終端命令
    ffmpeg_path = r".\ffmpeg\bin\ffmpeg.exe"
    # os.system(f'{ffmpeg_path} -i {title_1}.mp3 -i {title_1}.mp4 -c copy .\video\{title_}.mp4 -loglevel quiet')

    folder_path = f"./video/{fileName}"  # 替換為你想要創(chuàng)建的文件夾路徑
    if not os.path.exists(folder_path):
        os.mkdir(folder_path)
        # print(f"The folder '{folder_path}' already exists.")

    command = f'{ffmpeg_path} -i {title_1}.mp3 -i {title_1}.mp4 -c copy ./video/{fileName}/{i}.{title_}.mp4 -loglevel quiet'

    file_path = f"./video/{fileName}/{i}.{title_}.mp4"
    if os.path.exists(file_path):
        pass
    else:
        os.system(command)

    # 顯示合成文件的大小

    print(f'{i}.{title_}  下載完成')

    # 移除純視頻文件,
    os.remove(f'{title_1}.mp4')
    # 移除純音頻文件,
    os.remove(f'{title_1}.mp3')

3.4 多線程

代碼

import concurrent.futures
import requests

# 定義一個下載函數(shù)
def download_video(URL):
    url, index, name = URL.split(" ", 2)
    videoDownload3(url,index,name)

def THREAD(URLS):
    # 創(chuàng)建線程池,指定線程數(shù)量
    max_workers = 10  # 這里設(shè)置線程數(shù)量,根據(jù)需要進(jìn)行調(diào)整
    with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as executor:
        # 提交下載任務(wù)給線程池處理
        futures = [executor.submit(download_video, URL) for URL in URLS]

        # 等待所有任務(wù)完成
        for future in concurrent.futures.as_completed(futures):
            try:
                future.result()  # 獲取任務(wù)的結(jié)果(這里不需要結(jié)果)
            except Exception as e:
                print(f"An error occurred: {e}")


3.5 結(jié)果

url_model = "https://space.bilibili.com/471303350/channel/collectiondetail?sid=1278346 3"
value = url_model.split(' ')
url = value[0]
model = value[1]

if model == "1":
    videoDownload1(url)
    print("下載完成")
if model == "2":
    # 接口分析
    # 點(diǎn)進(jìn)去的話接口
    # https://www.bilibili.com/video/BV1qW4y1a7fU/?spm_id_from=333.337.search-card.all.click
    # 點(diǎn)擊視頻的話就這樣
    # https://www.bilibili.com/video/BV1qW4y1a7fU?p=1
    # https://www.bilibili.com/video/BV1qW4y1a7fU?p=2&vd_source=de2dcd0f37ff916ec3f8fb83c6366123
    # 可以發(fā)現(xiàn)不同的集的接口格式應(yīng)該是這樣的,p = 幾就是第幾集
    # https://www.bilibili.com/video/BV1qW4y1a7fU?p=1

    # 查看有多少集
    # 一種是視頻選集那塊會寫有多少個
    # 獲取源碼
    urls = getUrls2(url)
    i = 1
    for index,url in enumerate(urls):
        videoDownload2(url,index)

    print("下載完成")
if model == "3":
    # 接口分析
    # 視頻合計(jì)每個視頻接口沒有規(guī)律,然后再播放頁中網(wǎng)頁沒有直接的播放鏈接,所以就用合集頁的鏈接來分析
    # 網(wǎng)頁里面的每個鏈接都是動態(tài)加載的,需要訪問json數(shù)據(jù)獲取,也或者用虛擬瀏覽器那種等頁面加載完成后訪問(這種以后可能會更新,感覺這個有點(diǎn)麻煩),
    # 這里是用json數(shù)據(jù)做的
    # https://space.bilibili.com/107762251/channel/collectiondetail?sid=877119
    # https://api.bilibili.com/x/polymer/web-space/seasons_archives_list?mid=107762251&season_id=877119&sort_reverse=false&page_num=1&page_size=30
    # https://space.bilibili.com/389199842/channel/collectiondetail?sid=1275285
    # https://api.bilibili.com/x/polymer/web-space/seasons_archives_list?mid=389199842&season_id=1275285&sort_reverse=false&page_num=1&page_size=30
    # 這是兩個接口,前面那個數(shù)字是用戶,后面那個數(shù)字代表的是合集,下載的接口其實(shí)是股東

    urls,name = getUrls3(url)
    # print(len(urls))
    for index,url in enumerate(urls):
        # print(url)
        videoDownload3(url,index,name)
    # print(urls)
    # 多線程
    # for index,url in enumerate(urls):
    #     URLS.append(url + " " + str(index) + " " + name)
    #     THREAD(URLS)
    

那切里做展示,有些合集下載時候有點(diǎn)bug,還沒找到問題,可以下載,但是保存路徑有點(diǎn)問題,應(yīng)該是和命令行沖突了,我就不改了
python下載bilibili視頻,下載合集,下載選集,python,python,爬蟲
python下載bilibili視頻,下載合集,下載選集,python,python,爬蟲
python下載bilibili視頻,下載合集,下載選集,python,python,爬蟲

3.6 合集視頻更新

原來會出現(xiàn)部分合集顯示下載成功,但是文件夾里面沒有東西,是因?yàn)橛行┖霞衷诿罾锩鏇]辦法執(zhí)行,因?yàn)橐恍┨厥夥柺裁吹模园押霞质謩又付ㄒ幌孪螺d就可以了,然后多線程加上去,代碼如下
拿視頻鏈接的

# 獲取網(wǎng)頁源碼
def getUrls3(url):
    # 發(fā)送請求,得到響應(yīng)對象
        # 設(shè)置用戶代理,cookie
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
        'Cookie': "buvid3=7014DDC0-BF1E-B121-F5A5-F10753C840B423630infoc; i-wanna-go-back=-1; _uuid=49BF2138-1E10F-D5F5-10898-D8311651B53927883infoc; FEED_LIVE_VERSION=V8; DedeUserID=171300042; DedeUserID__ckMd5=c65bec3211413192; CURRENT_FNVAL=4048; rpdid=|(J|)J~m~llk0J'uYm|)~klRl; header_theme_version=CLOSE; hit-new-style-dyn=1; hit-dyn-v2=1; is-2022-channel=1; fingerprint=fe5c7462625770aa2abce449a7c01fd2; buvid_fp_plain=undefined; b_nut=1691207170; b_ut=5; buvid_fp=fe5c7462625770aa2abce449a7c01fd2; LIVE_BUVID=AUTO4016915564967297; buvid4=1AE73807-AEA0-7078-DA57-7F9FE5C3D6F896987-023080912-A0g5nInZwV3VmJJT68FJxw%3D%3D; home_feed_column=5; SESSDATA=fc1266d3%2C1708653865%2C29c08%2A81-i-T9HQrucvpCVcPwSwXl5LmjTyduIzF9veu0KS9i2IwXK_xkcqlt1XQyxJ3sG-9HMSwLwAAKgA; bili_jct=068bc0a79f3fa7aa1a030e478dbf6d4b; sid=5yvjlnfi; browser_resolution=1920-971; bili_ticket=eyJhbGciOiJFUzM4NCIsImtpZCI6ImVjMDIiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2OTMzNjY1MTcsImlhdCI6MTY5MzEwNzMxNywicGx0IjotMX0.I1Yfp8S9UIkU4S0G5vtBJfslPtgY7QLCj1dx9WQpyRmxKpZoA1qB5UYXNW4KBSZFGljMm7F1lbGXSGco7F79JZJ2sZNBvH9QiSVlmipzAJKaucIoFh6s3m1jpqjLp10r; bili_ticket_expires=1693366517; bp_video_offset_171300042=834376858445283367; b_lsid=1021245DB_18A3567E5C2; CURRENT_QUALITY=80; PVID=2"
    }
    # 使用正則表達(dá)式提取數(shù)字
    pattern = r'\d+'
    numbers = re.findall(pattern, url)
    mid = numbers[0]
    season_id = numbers[1]
    page_num = 1
    url = f"https://api.bilibili.com/x/polymer/web-space/seasons_archives_list?mid={mid}&season_id={season_id}&sort_reverse=false&page_num={page_num}&page_size=30"
    response = requests.get(url)

    if response.status_code == 200:
        json_data = response.json()
        # print(json_data["data"]["page"]["total"])
        total = int(json_data["data"]["page"]["total"])
        page_size = int(json_data["data"]["page"]["page_size"])
        page = int(total / page_size) + 1
        name = json_data["data"]["meta"]["name"]
        # print(total,page)
    
    urls = []
    # 
    for i in range(1,page+1):
        # print(i) 
        url = f"https://api.bilibili.com/x/polymer/web-space/seasons_archives_list?mid={mid}&season_id={season_id}&sort_reverse=false&page_num={i}&page_size=30"
        response = requests.get(url)
        if response.status_code == 200:
            json_data = response.json()
            archives = json_data["data"]["archives"]
            num = 0
            for j in archives:
                bvid = archives[num]["bvid"]
                videoUrl = f"https://www.bilibili.com/video/{bvid}/"
                num = num + 1
                urls.append(videoUrl)
    return urls,name

下載視頻的

import requests
import os
from lxml import etree
import re

def videoDownload3(url_,index,name):
    # 設(shè)置用戶代理,cookie
    headers_ = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36',
        'Cookie': "buvid3=7014DDC0-BF1E-B121-F5A5-F10753C840B423630infoc; i-wanna-go-back=-1; _uuid=49BF2138-1E10F-D5F5-10898-D8311651B53927883infoc; FEED_LIVE_VERSION=V8; DedeUserID=171300042; DedeUserID__ckMd5=c65bec3211413192; CURRENT_FNVAL=4048; rpdid=|(J|)J~m~llk0J'uYm|)~klRl; header_theme_version=CLOSE; hit-new-style-dyn=1; hit-dyn-v2=1; is-2022-channel=1; fingerprint=fe5c7462625770aa2abce449a7c01fd2; buvid_fp_plain=undefined; b_nut=1691207170; b_ut=5; buvid_fp=fe5c7462625770aa2abce449a7c01fd2; LIVE_BUVID=AUTO4016915564967297; buvid4=1AE73807-AEA0-7078-DA57-7F9FE5C3D6F896987-023080912-A0g5nInZwV3VmJJT68FJxw%3D%3D; home_feed_column=5; SESSDATA=fc1266d3%2C1708653865%2C29c08%2A81-i-T9HQrucvpCVcPwSwXl5LmjTyduIzF9veu0KS9i2IwXK_xkcqlt1XQyxJ3sG-9HMSwLwAAKgA; bili_jct=068bc0a79f3fa7aa1a030e478dbf6d4b; sid=5yvjlnfi; browser_resolution=1920-971; bili_ticket=eyJhbGciOiJFUzM4NCIsImtpZCI6ImVjMDIiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2OTMzNjY1MTcsImlhdCI6MTY5MzEwNzMxNywicGx0IjotMX0.I1Yfp8S9UIkU4S0G5vtBJfslPtgY7QLCj1dx9WQpyRmxKpZoA1qB5UYXNW4KBSZFGljMm7F1lbGXSGco7F79JZJ2sZNBvH9QiSVlmipzAJKaucIoFh6s3m1jpqjLp10r; bili_ticket_expires=1693366517; bp_video_offset_171300042=834376858445283367; b_lsid=1021245DB_18A3567E5C2; CURRENT_QUALITY=80; PVID=2"
    }

    # 發(fā)送請求,得到響應(yīng)對象
    response_ = requests.get(url_, headers=headers_)

    str_data = response_.text  # 視頻主頁的html代碼,類型是字符串

    # 使用xpath解析html代碼,,得到想要的url
    html_obj = etree.HTML(str_data)  # 轉(zhuǎn)換格式類型

    # 獲取視頻的名稱
    res_ = html_obj.xpath('//title/text()')[0]
    # 視頻名稱的獲取
    title_ = re.findall(r'(.*?)_嗶哩嗶哩', res_)[0]
    # 影響視頻合成的特殊字符的處理,目前就遇到過這三個,實(shí)際上很有可能不止這三個,遇到了就用同樣的方法處理就好了
    title_ = title_.replace('/', '')
    title_ = title_.replace(' ', '')
    title_ = title_.replace('&', '')
    title_ = title_.replace(':', '')

    # 使用xpath語法獲取數(shù)據(jù),取到數(shù)據(jù)為列表,索引[0]取值取出里面的字符串,即包含視頻音頻文件的url字符串
    url_list_str = html_obj.xpath('//script[contains(text(),"window.__playinfo__")]/text()')[0]

    # 純視頻的url
    video_url = re.findall(r'"video":\[{"id":\d+,"baseUrl":"(.*?)"', url_list_str)[0]

    # 純音頻的url
    audio_url = re.findall(r'"audio":\[{"id":\d+,"baseUrl":"(.*?)"', url_list_str)[0]

    # 設(shè)置跳轉(zhuǎn)字段的headers
    headers_ = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36',
        'Referer': url_
    }

    # 獲取純視頻的數(shù)據(jù)
    response_video = requests.get(video_url, headers=headers_, stream=True)
    bytes_video = response_video.content
    # 獲取純音頻的數(shù)據(jù)
    response_audio = requests.get(audio_url, headers=headers_, stream=True)
    bytes_audio = response_audio.content

    # 獲取文件大小, 單位為KB
    video_size = int(int(response_video.headers['content-length']) / 1024)
    audio_size = int(int(response_audio.headers['content-length']) / 1024)

    # 保存純視頻的文件
    title_1 = title_ + '!'  # 名稱進(jìn)行修改,避免重名
    title_1 = title_1.replace(':', '_')
    
    with open(f'{title_1}.mp4', 'wb') as f:
        f.write(bytes_video)
        # print(f'{title_1}純視頻文件下載完畢...,大小為:{video_size}KB, {int(video_size/1024)}MB')

    with open(f'{title_1}.mp3', 'wb') as f:
        f.write(bytes_audio)
        # print(f'{title_1}純音頻文件下載完畢...,大小為:{audio_size}KB, {int(audio_size/1024)}MB')

        # 利用第三方工具ffmpeg 合成視頻, 需要執(zhí)行終端命令
    ffmpeg_path = r".\ffmpeg\bin\ffmpeg.exe"
    # os.system(f'{ffmpeg_path} -i {title_1}.mp3 -i {title_1}.mp4 -c copy .\video\{title_}.mp4 -loglevel quiet')


    folder_path = f"./video/{name}"  # 替換為你想要創(chuàng)建的文件夾路徑

    if not os.path.exists(folder_path):
        os.mkdir(folder_path)
        # print(f"The folder '{folder_path}' already exists.")


    command = f'{ffmpeg_path} -i {title_1}.mp3 -i {title_1}.mp4 -c copy ./video/{name}/{index}.{title_}.mp4 -loglevel quiet'

    os.system(command)


    # 顯示合成文件的大小

    print(f'{title_}  下載完成')

    # 移除純視頻文件,
    os.remove(f'{title_1}.mp4')
    # 移除純音頻文件,
    os.remove(f'{title_1}.mp3')


多線程

import concurrent.futures
import requests

# 定義一個下載函數(shù)
def download_video(URL):
    url, index, name = URL.split(" ", 2)
    videoDownload3(url,index,name)

def THREAD(URLS):
    # 創(chuàng)建線程池,指定線程數(shù)量
    max_workers = 10  # 這里設(shè)置線程數(shù)量,根據(jù)需要進(jìn)行調(diào)整
    with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as executor:
        # 提交下載任務(wù)給線程池處理
        futures = [executor.submit(download_video, URL) for URL in URLS]

        # 等待所有任務(wù)完成
        for future in concurrent.futures.as_completed(futures):
            try:
                future.result()  # 獲取任務(wù)的結(jié)果(這里不需要結(jié)果)
            except Exception as e:
                print(f"An error occurred: {e}")

執(zhí)行


url_model = "https://space.bilibili.com/389199842/channel/collectiondetail?sid=1275285 3"
value = url_model.split(' ')
url = value[0]
model = value[1]

if model == "1":
    videoDownload1(url)
    print("下載完成")
if model == "2":
    # 接口分析
    # 點(diǎn)進(jìn)去的話接口
    # https://www.bilibili.com/video/BV1qW4y1a7fU/?spm_id_from=333.337.search-card.all.click
    # 點(diǎn)擊視頻的話就這樣
    # https://www.bilibili.com/video/BV1qW4y1a7fU?p=1
    # https://www.bilibili.com/video/BV1qW4y1a7fU?p=2&vd_source=de2dcd0f37ff916ec3f8fb83c6366123
    # 可以發(fā)現(xiàn)不同的集的接口格式應(yīng)該是這樣的,p = 幾就是第幾集
    # https://www.bilibili.com/video/BV1qW4y1a7fU?p=1

    # 查看有多少集
    # 一種是視頻選集那塊會寫有多少個
    # 獲取源碼
    urls = getUrls2(url)
    i = 1
    for index,url in enumerate(urls):
        videoDownload2(url,index)

    print("下載完成")
if model == "3":
    # 接口分析
    # 視頻合計(jì)每個視頻接口沒有規(guī)律,然后再播放頁中網(wǎng)頁沒有直接的播放鏈接,所以就用合集頁的鏈接來分析
    # 網(wǎng)頁里面的每個鏈接都是動態(tài)加載的,需要訪問json數(shù)據(jù)獲取,也或者用虛擬瀏覽器那種等頁面加載完成后訪問(這種以后可能會更新,感覺這個有點(diǎn)麻煩),
    # 這里是用json數(shù)據(jù)做的
    # https://space.bilibili.com/107762251/channel/collectiondetail?sid=877119
    # https://api.bilibili.com/x/polymer/web-space/seasons_archives_list?mid=107762251&season_id=877119&sort_reverse=false&page_num=1&page_size=30
    # https://space.bilibili.com/389199842/channel/collectiondetail?sid=1275285
    # https://api.bilibili.com/x/polymer/web-space/seasons_archives_list?mid=389199842&season_id=1275285&sort_reverse=false&page_num=1&page_size=30
    # 這是兩個接口,前面那個數(shù)字是用戶,后面那個數(shù)字代表的是合集,下載的接口其實(shí)是股東

    urls,name = getUrls3(url)
    name = "qml項(xiàng)目"
    URLS = []
    # print(len(urls))
    for index,url in enumerate(urls):
        # print(url)
        URLS.append(url + " " + str(index+1) + " " + name)
    THREAD(URLS)
    print("全部下載完成?。?!")
    # print(urls)
    # for index,url in enumerate(urls):
    #     URLS.append(url + " " + str(index) + " " + name)
    #     THREAD(URLS)

python下載bilibili視頻,下載合集,下載選集,python,python,爬蟲
python下載bilibili視頻,下載合集,下載選集,python,python,爬蟲

python下載bilibili視頻,下載合集,下載選集,python,python,爬蟲

四.參考

http://t.csdn.cn/6Pt7v 想下載B站視頻卻不知如何下手?一文教你爬B站!文章來源地址http://www.zghlxwxcb.cn/news/detail-675930.html

到了這里,關(guān)于python下載bilibili視頻,下載合集,下載選集的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ffmpeg解決bilibili下載的音視頻分離問題,將音視頻一鍵合成

    ffmpeg解決bilibili下載的音視頻分離問題,將音視頻一鍵合成

    1:到FFmpeg下載安裝包,我安裝的是windows 下載打包文件 2:解壓文件到本地 以下為解壓后的文件視圖 3:點(diǎn)擊進(jìn)去第一個bin文件,復(fù)制該目錄,安裝到本地環(huán)境變量中 然后點(diǎn)擊確定進(jìn)行保存設(shè)置 4:ctrl+r打開運(yùn)行,輸入cmd打開命令窗口,輸入ffmpeg -version查看版本 安裝成功 將所

    2024年02月11日
    瀏覽(28)
  • Python 爬蟲之下載視頻(一)

    Python 爬蟲之下載視頻(一)

    今天寫個從 好K視頻 平臺爬取正在播放的視頻,并下載保存到本地。 注意:建議大家先看看我之前的比較簡單的基礎(chǔ)教程文章,要不可能看起來會有點(diǎn)費(fèi)勁哦。 通過用戶輸入某個視頻的地址,然后程序會根據(jù)這個地址,自動獲取視頻的標(biāo)題和下載視頻,并將標(biāo)題命名為視頻

    2024年02月04日
    瀏覽(23)
  • Python 爬蟲之下載視頻(四)

    Python 爬蟲之下載視頻(四)

    這篇用來記錄一下如何爬取這個平臺的視頻,比如一些Python的教程小視頻(一個視頻四五分鐘的那種的),效果還是不錯的。 舉例,如下圖所示: 打開一個正在播放的網(wǎng)頁頁面,獲取視頻標(biāo)題和下載鏈接,在本地保存成mp4格式的視頻文件。 獲取視頻下載鏈接,電腦網(wǎng)頁檢查

    2024年01月22日
    瀏覽(19)
  • 簡單python網(wǎng)絡(luò)爬蟲批量下載視頻

    簡單python網(wǎng)絡(luò)爬蟲批量下載視頻

    寒假閑來無事,決定嘗試一下用python寫一個小網(wǎng)絡(luò)爬蟲批量下載視頻。 由于是第一次寫網(wǎng)絡(luò)爬蟲,可以說是兩眼一抹黑,整個程序都是自己一點(diǎn)點(diǎn)試出來的,所以程序本身肯定有一些漏洞和缺陷,如果有建議請批評指正。 由于CSDN審核不允許出現(xiàn)具體網(wǎng)址否則會因?yàn)榘鏅?quán)問題

    2023年04月08日
    瀏覽(30)
  • Python爬蟲:給我一個鏈接,西瓜視頻隨便下載

    Python爬蟲:給我一個鏈接,西瓜視頻隨便下載

    1.實(shí)現(xiàn)原理 首先,我們需要來到西瓜視頻的官網(wǎng),鏈接為:西瓜視頻,隨便點(diǎn)擊其中一個視頻進(jìn)入,點(diǎn)擊電腦鍵盤的F12來到開發(fā)者模式,按ctrl+F進(jìn)行搜索,輸入video,如下: 我們可以發(fā)現(xiàn),這里有一個視頻鏈接,我們點(diǎn)擊這個鏈接進(jìn)入,依舊按電腦F12鍵來到開發(fā)者模式,繼續(xù)

    2024年02月14日
    瀏覽(27)
  • python爬蟲練習(xí)系列之二:下載B站視頻

    python爬蟲練習(xí)系列之二:下載B站視頻

    【思路】 1.下載文件用requests庫最方便,因?yàn)榭梢垣@取錯誤碼,可以自定義保存文件名,且不用判斷文件是否已經(jīng)下載完成。 2.解析需要下載的地址,得到視頻和音頻文件下載地址 3.合成視頻和音頻,得到最終mp4文件。 本次涉及視頻操作,故需要安裝如下庫: pip install reque

    2024年02月03日
    瀏覽(20)
  • 【超簡版,代碼可用!】【0基礎(chǔ)Python爬蟲入門——下載歌曲/視頻】

    【超簡版,代碼可用!】【0基礎(chǔ)Python爬蟲入門——下載歌曲/視頻】

    科普: get:公開數(shù)據(jù) post:加密 ,個人信息 科普: 爬哪個網(wǎng)址? 怎么找視頻/音頻網(wǎng)址? 都是指URL,并非最上方的地址 把URL復(fù)制即可 如下操作: 解釋:【看不懂沒關(guān)系!請看下面的代碼!可以直接套用】 res=requests.get(url) # 發(fā)送請求 print(res.content) # 獲取二進(jìn)制數(shù)據(jù) wb 寫入

    2024年01月24日
    瀏覽(25)
  • Python:使用爬蟲抓取網(wǎng)頁中的視頻并下載(完整源碼)

    Python:使用爬蟲抓取網(wǎng)頁中的視頻并下載(完整源碼) 在今天的程序開發(fā)世界中,網(wǎng)站是不可或缺的一部分。人們使用網(wǎng)站來獲取有用的信息、購買商品和娛樂自己。這些網(wǎng)站的內(nèi)容通常包含了各種類型的文件,其中最常見的就是視頻。對于有經(jīng)驗(yàn)的程序開發(fā)者來說,使用

    2024年02月16日
    瀏覽(46)
  • Java使用Opencv進(jìn)行大圖找小圖并使用其找圖功能進(jìn)行bilibili視頻下載案例

    Java使用Opencv進(jìn)行大圖找小圖并使用其找圖功能進(jìn)行bilibili視頻下載案例

    本文將介紹Opencv在windows下的安裝,并使用Java操作Opencv進(jìn)行行大圖找小圖測試,最后通過應(yīng)用大圖找小圖功能來實(shí)現(xiàn)bilibili的視頻下載。 以下來自chatGpt3.5模型的回答: Opencv是一款開源的計(jì)算機(jī)視覺庫,可以用于圖像處理、目標(biāo)檢測、人臉識別等領(lǐng)域。在Opencv中,可以使用模板

    2024年02月16日
    瀏覽(24)
  • 基于python requests庫的bilibili爬蟲簡單嘗試以及數(shù)據(jù)分析及可視化

    基于python requests庫的bilibili爬蟲簡單嘗試以及數(shù)據(jù)分析及可視化

    在初步了解了關(guān)于爬蟲的課程之后,我也進(jìn)行了一些自己的嘗試。本文將從“爬取BiliBili Vtuber區(qū)直播信息為切入點(diǎn),來探討requests, re等庫的基礎(chǔ)應(yīng)用。在爬取信息之后,本文將通過matplotlib以及pandas庫做數(shù)據(jù)分析以及可視化 首先,我們先確認(rèn)任務(wù):打開Bilibili,在直播分區(qū)中選

    2024年02月05日
    瀏覽(17)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包