爬虫学习—小破站爬取单个视频

目标url:【颜值主播】快来快来,一粟小莎子蓝色战衣限时返场~_哔哩哔哩_bilibili

(输入目标url后记得加一个空格,再按回车键)

import requests
from lxml import etree
import re
from moviepy.editor import *

if __name__ == '__main__':
    # 输入播放页面的url
    url_ = input('请输入播放页面的url:')

    # 设置用户代理,cookie
    headers_ = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
        'referer': 'https://search.bilibili.com/all?vt=19210094&keyword=%E4%B8%80%E7%B2%9F%E5%B0%8F%E8%8E%8E%E5%AD%90&from_source=webtop_search&spm_id_from=333.1007&search_source=3'
    }

    # 发送请求,得到响应对象
    response_ = requests.get(url_,headers=headers_)

    str_data = response_.text  # 视频主页的html代码,类型是字符串

    # 使用xpath解析html代码,得到想要的url
    html_obj = etree.HTML(str_data)  # 转换格式类型

    # 使用xpath语法获取数据
    # 取到数据为列表,索引[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]

    # 设置灵活的headers
    headers_ = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
        'referer': url_
    }

    # 获取纯视频的数据
    response_video = requests.get(video_url,headers=headers_)
    bytes_video = response_video.content
    # 获取纯音频的数据
    response_audio = requests.get(audio_url,headers=headers_)
    bytes_audio = response_audio.content

    # 保存
    with open('一粟小莎子.mp4','wb') as f:
        f.write(bytes_video)
        print('纯视频文件下载完毕....')
    with open('一粟小莎子.mp3','wb') as f:
        f.write(bytes_audio)
        print('纯音频文件下载完毕....')

    ffmpeg_tools.ffmpeg_merge_video_audio('一粟小莎子.mp4', '一粟小莎子.mp3', '颜值主播.mp4')
    print('视频合成成功....')

爬虫学习—小破站爬取单个视频_第1张图片

 爬虫学习—小破站爬取单个视频_第2张图片

 

 

 

你可能感兴趣的:(爬虫,音视频,html,python)