一个创意灵感网站,某个频道都是灵感创意视频,其数据是异步加载方式,特别适合python新人json数据解析获取练习实践,基本上没有什么限制,不妨跟随本渣渣的脚步一起来撸一发!
关键要点:
- requests.post() 获取数据
- response.json() 数据解析
- mp4视频格式文件下载方法
获取视频列表内容信息
通过灵感视频栏目可以知晓,加载更多数据的方式是异步加载,进一步通过抓包可以获悉,该网站视频数据是通过post方式以json格式交互数据给前台用户,这里我们就可以应用requests.post来构造,当然你需要知晓api接口地址,以及提交的数据,尤其是页码数据,好在网页没有什么加密以及限制。
获取视频列表源码参考:
代码语言:javascript复制#获取视频列表
def get_videolist(page):
print(f'>> 正在获取第 {page} 页视频数据..')
url="https://www.topys.cn/api/web/video/get_list"
headers={
"cookies":cookise,
"user-agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36",
}
data={
'page': page,
'size': '16',
}
response=requests.post(url=url,data=data,headers=headers,timeout=5)
data=response.json()['data']
videoInfos=data['videoInfo']
if videoInfos:
print(">> 存在视频数据,开始解析视频数据..")
for videoInfo in videoInfos:
title=videoInfo['title']
video_id=videoInfo['video_id']
PS:这里需要提醒的是,网站视频观看及获取都是需要在登陆的操作前提下,你只需要在headers协议头里提交上自己的cookise信息即可!
获取真实视频播放地址及相关信息
同样的,通过进一步视频播放的观察和抓包,我们可以很容易得知单个视频的信息及播放地址也是通过post方式以json格式交互数据给前台用户,以同样的方式获取到我们想要的真实视频地址。
获取视频地址源码参考:
代码语言:javascript复制#获取真实视频地址信息
def get_video_info(video_id):
url = "https://www.topys.cn/api/web/video/get_video_info"
headers = {
"cookies": cookise,
"user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36",
}
data = {
"video_id":video_id,
}
response = requests.post(url=url, data=data, headers=headers, timeout=5)
data=response.json()['data']
play_list=data['play_list']
play_url=play_list[-1]['play_url']
print(f'>> 已经获取1920真实播放地址:{play_url}')
return play_url
response.json()解析json格式数据,可能不少json格式数据比较多,这里建议大家多尝试调试和测试来获取到自己想要获取的信息数据。
下载mp4格式视频文件
如果你有应用过python下载过图片文件,尤其是requests的方式,那么对于下载视频文件的话,其实还是比较简单的,方法类似,不过该视频网站下载的话存在一个比较明显的反爬,那就是在下载的headers协议头上你需要加上referer地址,不然会下载不到正确的视频文件内容。
下载视频文件源码参考:
代码语言:javascript复制#下载视频
def down_video(title,play_url):
pattern = r"[/\:*?"<>|]"
title = re.sub(pattern, "_", title) # 替换为下划线
play_title=f'{title}.{play_url.split(".")[-1]}'
headers={
'referer': 'https://www.topys.cn/video',
'user-agent':UserAgent().random,
}
r=requests.get(url=play_url,headers=headers,timeout=6)
with open(play_title,'wb') as f:
f.write(r.content)
print(f'>> 下载 {play_title} 视频完成!')
以上,就是全篇内容,仅供参考学习交流使用,请忽略本渣渣的胡言乱语,整体上比较简单,适合新人学习和参考,实践,注意爬取有度!
爬取下载视频效果
想要获取完整源码文件代码的老哥可以关注本渣渣微信公众号,后台回复“视频爬取”!
完整源码获取
关注本渣渣微信公众号
后台回复: 视频爬取