Python爬虫实战:下载合并豆瓣电影视频及音频
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))
代码解析:
-
导入必要的库:
requests: 用于发送HTTP请求获取网页内容。os: 用于处理文件和目录。json: 用于解析JSON数据。moviepy.editor: 用于编辑视频和音频文件。bs4: 用于解析HTML网页。
-
设置请求头:
- 使用
User-Agent模拟浏览器访问,避免被网站识别为爬虫。
- 使用
-
获取网页内容:
- 使用
requests.get()方法获取指定URL的网页内容。
- 使用
-
解析网页:
- 使用
BeautifulSoup解析HTML网页,提取目标数据。 - 使用
find()方法找到包含视频和音频链接的<script>标签。
- 使用
-
提取视频和音频链接:
- 使用字符串切片和
json.loads()方法提取JSON数据中的视频和音频链接。
- 使用字符串切片和
-
下载视频和音频:
- 使用
requests.get()方法下载视频和音频文件。 - 使用
with open()方法将文件保存到本地。
- 使用
-
合并视频和音频:
- 使用
VideoFileClip和AudioFileClip加载视频和音频文件。 - 使用
set_audio()方法将音频添加到视频中。 - 使用
write_videofile()方法保存合并后的视频文件。
- 使用
注意事项:
- 在运行代码之前,请确保已经安装了所有必要的库。
- 该代码仅供学习和研究使用,请勿用于非法用途。
原文地址: http://www.cveoy.top/t/topic/fQVI 著作权归作者所有。请勿转载和采集!