Python爬虫实战:用requests和BeautifulSoup抓取百度好看视频
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×tamp=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优化,可以使您的博客文章更容易被搜索引擎收录,并吸引更多读者。
原文地址: https://www.cveoy.top/t/topic/fRlm 著作权归作者所有。请勿转载和采集!