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

if __name__ == '__main__':
    url = 'https://movie.douban.com/j/chart/top_list'
    param = {
        'type': '24',
        'interval_id': '100 % 3A90',
        'action': '',
        'start': '0',  # 从库中的第几部去取
        'limit': '10',  # 一次性取出的部数
    }

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36 Edg/99.0.1150.55'
    }
    response = requests.get(url=url, params=param, headers=headers)

    list_data = response.json()

    for movie in list_data:
        title = movie['title']
        rating = movie['rating']
        print(f'电影名称:{title}')
        print(f'评分:{rating}')

        # 向这个地址发送请求,得到响应对象
        res = requests.get(movie['url'], headers=headers)
        # 使用 bs4 将页面源码进行解析
        soup = BeautifulSoup(res.text, 'html.parser')
        # 定位页面的标题,当成文件保存名称
        title = soup.h1.string
        # 我们需要的数据在script的标签内,但是没有属性不能过滤
        script_all = soup.find_all('script')
        for script in script_all:
            content = script.text  # 提取script的文本内容
            # 包含判断
            if 'window.__playinfo__=' in content:
                # 剔除 window.__playinfo__= 这些内容,剩余的内容就是需要转化的数据
                content_res = content[20:]
                # 通过json的方法 将类似于字典的字符串数据转化成字典类型
                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(f'{title}.mp4', 'wb') as v_file:
                    v_file.write(video_res.content)
                print(f'视频文件名:{title}.mp4')

                # 提取音频链接
                audio_url = data['data']['dash']['audio'][0]['baseUrl']
                print(f'音频文件名:{title}.mp3')
                # 请求访问音频链接
                audio_res = requests.get(audio_url, headers=headers)
                # 保存音频文件
                with open(f'{title}.mp3', 'wb') as a_file:
                    a_file.write(audio_res.content)

                # 创建视频编辑对象
                video_clip = VideoFileClip(f'{title}.mp4')
                # 创建音频编辑对象
                audio_clip = AudioFileClip(f'{title}.mp3')
                # 视频 需要设置音频
                merge_result = video_clip.set_audio(audio_clip)
                # 保存到视频文件
                merge_result.write_videofile(f'merge-{title}.mp4')
Python爬虫实战:下载合并豆瓣电影视频

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

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