import requests
import os
import json
from moviepy.editor import VideoFileClip, AudioFileClip
from bs4 import BeautifulSoup

if __name__ == '__main__':
    url = 'https://movie.douban.com/subject/35414156/'
    headers = {
        'User-Agent': 'Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 99.0.4844.74 Safari / 537.36Edg / 99.0.1150.55'
    }
    res = requests.get(url, headers=headers)
    soup = BeautifulSoup(res.text, 'html.parser')

    # 定位页面的标题,当成文件保存名称
    title = soup.find('h1').find('span', property='v:itemreviewed').text.strip()

    script_all = soup.find_all('script')
    for script in script_all:
        content = script.text
        if 'window.__playinfo__=' in content:
            content_res = content[20:]
            data = json.loads(content_res)
            video_url = data['data']['dash']['video'][0]['baseUrl']
            headers['referer'] = url
            video_res = requests.get(video_url, headers=headers)
            with open('{}.mp4'.format(title), 'wb') as v_file:
                v_file.write(video_res.content)

            audio_url = data['data']['dash']['audio'][0]['baseUrl']
            print(audio_url)
            audio_res = requests.get(audio_url, headers=headers)
            with open('{}.mp3'.format(title), 'wb') as a_file:
                a_file.write(audio_res.content)

            video_clip = VideoFileClip('{}.mp4'.format(title))
            audio_clip = AudioFileClip('{}.mp3'.format(title))
            merge_result = video_clip.set_audio(audio_clip)
            merge_result.write_videofile('merge-{}.mp4'.format(title))

代码解析:

  1. 导入必要的库:

    • requests: 用于发送HTTP请求获取网页内容。
    • os: 用于处理文件和目录。
    • json: 用于解析JSON数据。
    • moviepy.editor: 用于编辑视频和音频文件。
    • bs4: 用于解析HTML网页。
  2. 设置请求头:

    • 使用User-Agent模拟浏览器访问,避免被网站识别为爬虫。
  3. 获取网页内容:

    • 使用requests.get()方法获取指定URL的网页内容。
  4. 解析网页:

    • 使用BeautifulSoup解析HTML网页,提取目标数据。
    • 使用find()方法找到包含视频和音频链接的<script>标签。
  5. 提取视频和音频链接:

    • 使用字符串切片和json.loads()方法提取JSON数据中的视频和音频链接。
  6. 下载视频和音频:

    • 使用requests.get()方法下载视频和音频文件。
    • 使用with open()方法将文件保存到本地。
  7. 合并视频和音频:

    • 使用VideoFileClipAudioFileClip加载视频和音频文件。
    • 使用set_audio()方法将音频添加到视频中。
    • 使用write_videofile()方法保存合并后的视频文件。

注意事项:

  • 在运行代码之前,请确保已经安装了所有必要的库。
  • 该代码仅供学习和研究使用,请勿用于非法用途。
Python爬虫实战:下载合并豆瓣电影视频及音频

原文地址: http://www.cveoy.top/t/topic/fQVI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录