python实战笔记之(8):下载知乎视频

本文详细介绍了如何使用Python下载知乎视频,包括分析目标站点、获取视频真实URL、解析m3u8请求URL和下载视频流的过程。通过正则表达式和请求库解析网页,最终合并ts片段为完整视频。
摘要由CSDN通过智能技术生成

这篇想写很久了,今天专门搞了搞,现在把用python下载知乎视频的整个流程码下来。

(1)目标站点分析

比如这篇知乎文章https://www.zhihu.com/question/279247693/answer/442578073里有一个小视频,我们想把它下载下来,首先对该网页进行分析。先来看一下原始请求:

原始请求有没有返回视频的链接呢?我们点开“Preview”和“Response”看一看:

这不就是我们想要的东西吗!接下来就是常规操作了,requests请求到网页代码之后可以用正则表达式或者BeautifulSoup和PyQuery之类的解析库提取到视频的URL。

现在让我们看一看上面的视频URL打开之后是什么东西:

显然,这是一个可以播放的视频,问题是我们怎样才能把它下载下来呢?一步一步来分析:

首先,我们发现原始请求返回的状态码是301,而且细心一些就可以看到网页的URL变了,从原来的https://www.zhihu.com/video/1001598833150816256变成了一个新的URLhttps://v.vzuu.com/video/1001598833150816256,如上图。状态码301代表什么呢,同样百度一下:

301表示永久重定向(301 moved permanently),表示请求的资源分配了新url,以后应使用新url。

这样就可以理解了,也就是请求视频的URL之后,转到了一个新的URL,我们可以用一个函数获取到这个新的URL:

def get_real_url(url, try_count=1):
	if try_count > 3:
		return None
	try:
		headers = {
			'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36'
		}
		response = requests.get(url, headers=headers, timeout=10)
		if response.status_code >= 400:
			return get_real_url(url, try_count+1)
		return response.url
	except RequestException:
			return get_real_url(url, try_count+1)

然后,我们看一下请求这个新的URL会发生什么:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值