Vorwort
Jetzt erlaubt Zhihu das Hochladen von Videos, aber ich kann keine Videos herunterladen, ich bin so wütend . Nach einer Weile habe ich den Code eingegeben, um das Herunterladen und Speichern des Videos zu erleichtern.
Warum haben Katzen überhaupt keine Angst vor Schlangen? Antworten Sie als Beispiel und teilen Sie den gesamten Download-Prozess.
Verwandte Lernempfehlungen: Python-Video-Tutorial
Debuggen
Öffnen Sie F12 , suchen Sie den Cursor, wie unten gezeigt:
und bewegen Sie dann den Cursor auf das Video. Wie unten gezeigt:
Hey, was ist das? Im Sichtfeld erschien ein mysteriöser Link: https://www.zhihu.com/video/xxxxx, kopieren wir diesen Link in den Browser und öffnen wir dann:
Es scheint, dass dies das Video ist, nach dem wir suchen. Keine Sorge, werfen wir einen Blick auf die Anfrage auf der Webseite, und dann werden Sie eine sehr interessante Anfrage finden (hier kommt der Fokus):
Lassen Sie uns selbst einen Blick auf die Daten werfen:
{ "playlist": { "ld": { "width": 360, "format": "mp4", "play_url": "https://vdn.vzuu.com/LD/05fc411e-d8e0-11e8-bb8b-0242ac112a0b.mp4?auth_key=1541477643-0-0-987c2c504d14ab1165ce2ed47759d927&expiration=1541477643&disable_local_cache=1", "duration": 17, "size": 1123111, "bitrate": 509, "height": 640 }, "hd": { "width": 720, "format": "mp4", "play_url": "https://vdn.vzuu.com/HD/05fc411e-d8e0-11e8-bb8b-0242ac112a0b.mp4?auth_key=1541477643-0-0-8b8024a22a62f097ca31b8b06b7233a1&expiration=1541477643&disable_local_cache=1", "duration": 17, "size": 4354364, "bitrate": 1974, "height": 1280 }, "sd": { "width": 480, "format": "mp4", "play_url": "https://vdn.vzuu.com/SD/05fc411e-d8e0-11e8-bb8b-0242ac112a0b.mp4?auth_key=1541477643-0-0-5948c2562d817218c9a9fc41abad1df8&expiration=1541477643&disable_local_cache=1", "duration": 17, "size": 1920976, "bitrate": 871, "height": 848 } }, "title": "", "duration": 17, "cover_info": { "width": 720, "thumbnail": "https://pic2.zhimg.com/80/v2-97b9435a0c32d01c7c931bd00120327d_b.jpg", "height": 1280 }, "type": "video", "id": "1039146361396174848", "misc_info": {} }
Das stimmt, das Video, das wir herunterladen möchten, ist darin, wobei ld für Common Definition und sd steht für Standard Definition und HD steht für High Definition. Geben Sie den entsprechenden Link erneut in den Browser ein, klicken Sie dann mit der rechten Maustaste und speichern Sie, um das Video herunterzuladen.
Code
Sobald Sie wissen, wie der gesamte Prozess aussieht, ist der nächste Prozess des Codierens einfach. Ich werde hier nicht zu viel erklären, sondern einfach mit dem fortfahren Code:
# -*- 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 raise ValueError("获取视频编号异常:{}".format(self.url)) except Exception as e: raise Exception(e) def get_video_url_by_number(self): url = "{}/{}".format(self.video_api, self.video_number) headers = {} headers['Referer'] = 'https://v.vzuu.com/video/{}'.format( self.video_number) headers['Origin'] = 'https://v.vzuu.com' headers[ 'User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36' headers['Content-Type'] = 'application/json' try: response = requests.get(url, headers=headers) response_dict = response.json() if self.clarity in response_dict['playlist']: self.download_url = response_dict['playlist'][ self.clarity]['play_url'] else: for clarity in self.clarity_list: if clarity in response_dict['playlist']: self.download_url = response_dict['playlist'][ self.clarity]['play_url'] break return self except Exception as e: raise Exception(e) def get_video_by_video_url(self): response = requests.get(self.download_url) datetime_str = datetime.datetime.now().strftime("%Y-%m-%d %H-%M-%S") if self.video_name is not None: video_name = "{}-{}.mp4".format(self.video_name, datetime_str) else: video_name = "{}-{}.mp4".format(str(uuid.uuid1()), datetime_str) path = "{}".format(video_name) with open(path, 'wb') as f: f.write(response.content) def download_video(self): if self.clarity not in self.clarity_list: raise ValueError("清晰度参数异常,仅支持:ld(普清),sd(标清),hd(高清)") if self.check_url_format(): return self.get_video_number().get_video_url_by_number().get_video_by_video_url() if __name__ == '__main__': a = DownloadVideo('https://www.zhihu.com/question/53031925/answer/524158069') print(a.download_video())
Fazit
Der Code hat noch Raum für Optimierung. Ich habe gerade das erste Video in der Antwort heruntergeladen Habe mehr Ein Video. Wenn Sie Fragen oder Anregungen haben, können Sie uns gerne mitteilen.
Verwandte Lernempfehlungen: Python-Video-Tutorial
Das obige ist der detaillierte Inhalt vonErfahren Sie, wie Sie mit Python Videos mit bestimmten Antworten auf Zhihu aufnehmen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!