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

# 目标网页分析
# 通过浏览器开发者工具分析目标网页结构,找到视频数据所在的json接口

# 数据抓取
base_url = 'https://haokan.baidu.com/haokan/ui-search/pc/search/video?pn=2&rn=10&type=video&query=%E4%BD%A0%E7%9A%84%E5%90%8D%E5%AD%97&sign=2753e5d9aa663a17bda4aefe7d70c195&version=1&timestamp=1689934533378'
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',
    'referer': 'https://haokan.baidu.com/v?vid=4662423747805012530',
    'cookie': '填写你获取的cookie'  # 替换成你实际获取的cookie
}

response = requests.get(base_url, headers=headers)  # 发送请求
if response.status_code == 200:
    data = response.text
else:
    print('请求失败,状态码:', response.status_code)
    exit()

# 数据解析
try:
    json_data = json.loads(data)  # 将json格式数据转换为python字典
    video_list = json_data['data']['list']  # 根据网页结构提取视频列表
except KeyError:
    print('数据解析错误,请检查网页结构是否发生变化')
    exit()

# 视频下载
if not os.path.exists('./视频/'):
    os.mkdir('./视频/')

for video in video_list:
    video_title = video['title'] + '.mp4'  # 提取视频标题
    video_url = video['url']  # 提取视频播放地址
    print(f'正在下载: {video_title},播放地址: {video_url}')

    try:
        video_data = requests.get(video_url, headers=headers).content  # 下载视频内容
        with open(f'./视频/{video_title}', 'wb') as f:
            f.write(video_data)
        print('下载完成\n')
    except Exception as e:
        print(f'下载失败: {video_title},错误信息: {e}')

错误分析:

原代码出现 KeyError: 'response' 的原因是在获取的json数据中,'data'键的下一级并没有'response'这个键。

代码改进:

  1. 明确目标数据结构: 通过分析实际返回的json数据,确定视频列表存储在 json_data['data']['list'] 中。
  2. 异常处理: 使用 try...except 块捕获 KeyError 异常,防止程序因数据结构变化而崩溃,并给出更友好的提示信息。
  3. 代码注释: 添加了代码注释,解释每一部分的功能和实现逻辑,提高代码可读性。
  4. 文件保存: 创建 '视频' 文件夹用于保存下载的视频,避免文件混乱。
  5. 信息输出: 使用 f-string 格式化输出下载信息,更简洁易读。

注意事项:

  • 百度好看视频的网页结构可能发生变化,导致代码失效,需要重新分析网页结构并修改代码。
  • 爬取网页信息时请遵守 robots 协议和相关法律法规。
  • 下载大量视频可能会占用较多带宽和存储空间,请谨慎操作。
Python爬虫实战: 批量下载百度好看视频

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

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