用 python 抓取知乎指定回答下的视频

 现在知乎允许上传视频,奈何不能下载视频,好气哦,无奈之下研究一下了,然后撸了代码,方便下载视频保存。

接下来以 

然后将光标移动到视频上。如下图:

咦这是什么?视野中出现了一条神秘的链接: 

似乎这就是我们要找的视频,不要着急,让我们看一看,网页的请求,然后你会发现一个很有意思的请求(重点来了):

让我们自己看一下数据吧:

{     "playlist": {         "ld": {             "width": 360,             "format": "mp4",             "play_url": "upload/201812201646191680.jpg",         "height": 1280     },     "type": "video",     "id": "1039146361396174848",     "misc_info": {} }

没错了,我们要下载的视频就在这里面,其中 ld 代表普清,sd 代表标清, hd 代表高清,把相应链接再次在浏览器打开,然后右键保存就可以下载视频了。

代码

知道整个流程是什么样子,接下来撸代码的过程就简单了,这里就不过再做过多解释了,直接上代码:

# -*- encoding: utf-8 -*-  import re import requests import uuid import datetime   class DownloadVideo:      __slots__ = [         'url', 'video_name', 'url_format', 'download_url', 'video_number',         'video_api', 'clarity_list', 'clarity'     ]      def __init__(self, url, clarity='ld', video_name=None):         self.url = url         self.video_name = video_name         self.url_format = "https://www.zhihu.com/question/\d+/answer/\d+"         self.clarity = clarity         self.clarity_list = ['ld', 'sd', 'hd']         self.video_api = 'https://lens.zhihu.com/api/videos'      def check_url_format(self):         pattern = re.compile(self.url_format)         matches = re.match(pattern, self.url)         if matches is None:             raise ValueError(                 "链接格式应符合:https://www.zhihu.com/question/{number}/answer/{number}"             )         return True      def get_video_number(self):         try:             headers = {                 'User-Agent':                 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'             }             response = requests.get(self.url, headers=headers)             response.encoding = 'utf-8'             html = response.text             video_ids = re.findall(r'data-lens-id="(\d+)"', html)             if video_ids:                 video_id_list = list(set([video_id for video_id in video_ids]))                 self.video_number = video_id_list[0]                 return self     
                    
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信