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, likeGecko) Chrome / 99.0.4844.74 Safari / 537.36Edg / 99.0.1150.55'
    }
    response = requests.get(url=url, params=param, headers=headers)

    list_data = response.json

    res = requests.get(url, headers=headers)
    soup = BeautifulSoup(res.text, 'html.parser')

    # 定位页面的标题,当成文件保存名称
    title_element = soup.find('h2', class_='title')
    if title_element:
        title = title_element.string
    else:
        title = 'Untitled'

    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请求,BeautifulSoup用于解析HTML,moviepy用于处理视频和音频,json用于解析JSON数据。
  2. 设置目标URL和请求参数: 定义豆瓣电影Top10榜单的API接口URL,并设置请求参数,例如电影类型、时间间隔、起始位置和获取数量等。
  3. 设置请求头: 模拟浏览器行为,设置User-Agent等请求头信息,避免被网站识别为爬虫程序。
  4. 发送请求并获取数据: 使用requests库发送GET请求,并将返回的数据转换为JSON格式。
  5. 解析HTML页面: 使用BeautifulSoup库解析HTML页面,找到目标数据,例如电影标题、视频链接等。
  6. 提取视频和音频链接: 通过分析页面结构,定位到包含视频和音频链接的script标签,并使用正则表达式或字符串处理方法提取链接地址。
  7. 下载视频和音频: 使用requests库下载视频和音频文件,并将文件保存到本地。
  8. 合并视频和音频: 使用moviepy库将下载的视频和音频文件合并成一个完整的视频文件。

注意事项:

  • 在爬取网站数据时,请遵守网站的robots.txt协议,不要对网站造成过大的负担。
  • 本代码仅供学习交流使用,请勿用于非法用途。
Python爬虫实战:使用requests和BeautifulSoup爬取豆瓣电影Top10并下载视频

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

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