Python爬虫实战:使用requests和BeautifulSoup抓取视频
import requests
import os
import json
from moviepy.editor import VideoFileClip, AudioFileClip
from bs4 import BeautifulSoup
# 数据的抓取
base_url = 'http://www.zkk78.com/index.php/user/ajax_ulog/?ac=set&mid=1&id=4721&sid=1&nid=1&type=4'
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': 'http://www.zkk78.com/dongmanplay/4721-1-1.html',
'Cookie': '__51cke__=; Hm_lvt_38ea8ed97fbe7c334fcc1878c579e5e0=1689927815; Hm_lvt_c11e70df18184f7263176ce90c8a9cc3=1689927817; PHPSESSID=2pnhv3rla9asc5i0l248i8dl83; user_id=20620; user_name=2143552649; group_id=2; group_name=%E9%BB%98%E8%AE%A4%E4%BC%9A%E5%91%98; user_check=b93515cf840072f8df045b0842e31513; user_portrait=%2Fstatic%2Fimages%2Ftouxiang.png; XLA_CI=43a5b7a031caf14cbacec3c121269bcf; history=%5B%7B%22name%22%3A%22%E5%9B%9E%E5%A4%8D%E6%9C%AF%E5%A3%AB%E7%9A%84%E9%87%8D%E6%9D%A5%E4%BA%BA%E7%94%9F%22%2C%22pic%22%3A%22https%3A%2F%2Fpic.rmb.bdstatic.com%2Fbjh%2F377f268028bb09e80035191cd9f15c58.jpeg%22%2C%22link%22%3A%22%2Fdongmanplay%2F4721-1-1.html%22%2C%22part%22%3A%22%E7%AC%AC01%E9%9B%86%22%7D%5D; __tins__21589017=%7B%22sid%22%3A%201689927814622%2C%20%22vd%22%3A%207%2C%20%22expires%22%3A%201689929681755%7D; __51laig__=7; Hm_lpvt_38ea8ed97fbe7c334fcc1878c579e5e0=1689927882; Hm_lpvt_c11e70df18184f7263176ce90c8a9cc3=1689927882',
}
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)
# 检查data的数据类型
print(type(json_data))
# 提取视频信息
video_info = json_data.get('info') # 使用get方法避免KeyError
if video_info:
video_title = str(video_info.get('title', 'video')) + '.mp4' # 获取标题,如果不存在则默认'video'
video_url = video_info.get('play_url')
if video_url:
print('正在下载:', video_title)
#第二次请求
video_data = requests.get(video_url, headers=headers).content
with open(os.path.join('./视频', video_title), 'wb') as f:
f.write(video_data)
print('下载完成\n')
else:
print('未找到视频信息')
代码解析:
- 导入必要的库:
requests,os,json,moviepy.editor,bs4 - 设置请求头: 包括
User-Agent,Referer,Cookie,模拟浏览器行为 - 发送请求: 使用
requests.get()方法获取网页内容 - 解析JSON数据: 使用
json.loads()方法将JSON字符串转换为Python字典 - 提取视频信息: 使用
get()方法安全地获取视频标题和链接 - 下载视频: 使用
requests.get()方法下载视频内容,并保存到本地文件
错误解决:
代码中可能出现的错误TypeError: string indices must be integers,是因为json_data['info']返回的是一个字典,而不是列表。
解决方案:
使用json_data.get('info')获取info的值,并检查是否为None。
如果info存在,则使用get()方法安全地获取视频标题和链接。
总结:
这段代码演示了如何使用Python爬虫技术抓取网站上的视频。通过使用requests和BeautifulSoup库,我们可以轻松地获取网页内容并提取所需的信息。同时,我们还需要注意处理可能出现的错误,以保证代码的健壮性。
原文地址: https://www.cveoy.top/t/topic/fRc1 著作权归作者所有。请勿转载和采集!