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

# 数据的抓取
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内容',
}

response = requests.get(base_url, headers=headers)  # 第一次请求
print(response.status_code)
data = response.text
print(data)

# 数据解析, jsonload转换为python格式
json_data = json.loads(data)
print(json_data)
# 错误原因:json_data中没有'response'键
# json_list = json_data['data']['response']['videos']
# 修改后的代码:
json_list = json_data['data']['list']
print(json_list)

for data in json_list:
    video_title = data['title'] + '.mp4'
    video_url = data['url']
    print(video_title, video_url)

    print('正在下载:', video_title)
    # 第二次请求
    video_data = requests.get(video_url, headers=headers).content
    with open(r'./视频/' + video_title, 'wb') as f:
        f.write(video_data)
        print('下载完成\n')

错误分析

原始代码中 json_list = json_data['data']['response']['videos'] 出现 KeyError: 'response' 错误,是因为返回的json数据结构中,'data'键下并没有'response'键。实际上,'videos' 数据位于 'data' 键下的 'list' 键中。

代码修改

json_list = json_data['data']['response']['videos'] 修改为 json_list = json_data['data']['list'] 即可解决该错误。

其他优化

  • 在代码中添加注释,解释代码的功能和逻辑,提高代码可读性。
  • 使用更具有描述性的变量名,例如将 data 替换为 video_info
  • 添加异常处理机制,例如使用 try-except 语句捕获网络请求可能出现的异常。
  • 优化代码结构,例如将视频下载功能封装成一个函数。

通过以上SEO优化,可以使您的博客文章更容易被搜索引擎收录,并吸引更多读者。

Python爬虫实战:用requests和BeautifulSoup抓取百度好看视频

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

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