微信 8.0 版本更新后,可以设置个人状态,状态里面可以添加火录制视频,很快状态视频就火了,可以看下知乎热榜有没有微信8.0状态沙雕又可爱的视频或图片?[1]。比如我也设置了一个:

于是我就想把这些视频下载下来,也玩一玩。本文讲述如何使用 Python 一键下载知乎某个回答下的所有视频。

思路:分析知乎回答页面 -> 定位视频 -> 寻找视频播放的 url -> 下载。其实就两步:找到 url,然后下载。

寻找 url

一个回答下面可能有多个视频,先分析一个视频,打开谷歌浏览器的开发者工具窗口,找到 network,勾选 preserve log、disable cache,选择 xhr,刷新,很容易找到如下图所示的接口:

从上图接口返回的数据就可以获取视频播放的 url、标题、格式等信息,这就够了,复制 play_url,放在浏览器上看一下,发现可以直接下载,说明那么这个 url 就是我们需要的。

接下来,写代码,获取接口返回的数据:

def get(url: str) -> list:"""获取知乎视频的 url返回格式[{'url':'', 'title','format':'',},{}]"""data = []headers = {"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",}with requests.get(url, headers=headers, timeout=10) as rep:if rep.status_code == 200:ids = re.findall(r"www.zhihu.com/zvideo/(\d{1,})", rep.text)ids = list(set(ids))  # 去掉重复元素else:print(f"网络连接失败,状态码 { rep.status_code }")return []if not ids:print("视频获取失败,可能是这个页面没有视频")return []for id in ids:print(id)with requests.get(f"https://www.zhihu.com/api/v4/zvideos/{id}/card",headers=headers,timeout=10,) as rep:if rep.status_code == 200:ret_data = rep.json()playlist = ret_data["video"]["playlist"]title = ret_data.get("title")temp = playlist.get("ld") or playlist.get("sd")if temp:sigle_video = {}sigle_video["url"] = temp.get("play_url")sigle_video["title"] = titlesigle_video["format"] = temp.get("format")data.append(sigle_video)else:print(f"网络连接失败,状态码 { rep.status_code }")return []return data

下载视频

这个比较简单了,直接请求视频播放的 url,将流式的内容保存到文件中,最多再加个进度条的展示。部分视频获取的 title 为空,这时就使用时间戳来命名文件。

请看代码:

def download( file_url, file_name=None, file_type=None, save_path="download", headers=None, timeout=15,): """:param file_url: 下载资源链接:param file_name: 保存文件名,默认为当前日期时间:param file_type: 文件类型(扩展名):param save_path: 保存路径,默认为download,后面不要"/":param headers: http请求头"""if file_name is None or file_name == "":file_name = str(datetime.now())if file_type is None:if "." in file_url:file_type = file_url.split(".")[-1]else:file_type = "uknown"file_name = file_name + "." + file_typeif headers is None:headers = {"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B137 Safari/601.1"}if os.path.exists(save_path):passelse:os.mkdir(save_path)# 下载提示if os.path.exists(f"{save_path}/{file_name}"):print(f"\033[33m{file_name}已存在,不再下载!\033[0m")return Trueprint(f"Downloading {file_name}")try:with requests.get(file_url, headers=headers, stream=True, timeout=timeout) as rep:file_size = int(rep.headers["Content-Length"])if rep.status_code != 200:print("\033[31m下载失败\033[0m")return Falselabel = "{:.2f}MB".format(file_size / (1024 * 1024))with click.progressbar(length=file_size, label=label) as progressbar:with open(f"{save_path}/{file_name}", "wb") as f:for chunk in rep.iter_content(chunk_size=1024):if chunk:f.write(chunk)progressbar.update(1024)print(f"\033[32m{file_name}下载成功\033[0m")except Exception as e:print("下载失败: ", e)return True

执行代码下载:

import os, sys
import re
import click
import requests
from datetime import datetimedef get(url: str) -> list:#见上文...def download( file_url, file_name=None, file_type=None, save_path="download", headers=None, timeout=15,): #见上文...if __name__ == "__main__":videos = get(sys.argv[1])for video in videos:download(file_url = video['url'],file_name= video['title'] ,file_type= video['format'],save_path='./download')

执行结果如下图所示:

最后的话

网站可能会发生变更,因此本文的代码可能随着时间变化而无法使用,请自行调节一些正则表达式和参数。爬取的思路是通用的,无非就是找到视频的流式数据,进行保存。思路有了,编写代码就是体力活了。

此外,如果你只是想要一些酷炫、搞笑、可爱的视频资源,玩一下微信 8.0 的状态,请在公众号「Python七号」回复「视频」,即可获取微信 8.0 的状态视频合集的下载链接:

该关键词不定期更新一些有趣好玩的视频。后面会更新其他网站用Python 爬取视频的方法,敬请关注「Python七号」,设为星标,第一时间接收更新。

资料

[1]

有没有微信8.0状态沙雕又可爱的视频或图片?: https://www.zhihu.com/question/441253090

留言讨论

知乎有很多好玩的微信8.0状态视频,用Python一键下载相关推荐

  1. 微信8.0状态视频素材免费送!

    大家好,我是懂王. 最近微信发布了 8.0 版本,首先是向 IOS 用户推送了更新,相信大家已经用上了.不过安卓用户现在也陆续更新了,这里注意华为手机是可以自动更新的,其他手机如果没有收到推送的话,可 ...

  2. 微信8.0状态视频无水印素材+个人设置技巧(最全小白教程)

    最近发现微信8.0更新了,好多有意思的东西,微信里面的表情可以动起来,特殊表情的全屏动画,视频号,"状态"功能 说起微信新出来的"状态"功能,让小牛想起了QQ ...

  3. 微信8.0状态视频素材免费下载

    自从微信更新了8.0版本后,带来了不少新鲜玩法,除了聊天界面被炸弹疯狂刷屏外,微信状态也被各路网友玩出圈了. 我这有大量的视频素材,每天可以换着玩,哈哈

  4. 微信8.0状态视频素材大全

    关注公众号 柳岸花开,回复[888]获取所有素材.

  5. 微信8.0搞笑视频合集网盘下载 怎么设置8.0状态教程攻略分享

    微信8.0更新之后,用户可以针对自己的微信号设置一个状态,在状态中可以设置文字.图片.视频.很多看官都在找搞笑.合适自己的微信8.0状态视频,游综宅小编特意给大家整理一波非常适合当微信状态的视频给大家 ...

  6. 微信8.0状态壁纸自取(迪迦相信光)

    工作再忙,闲暇时光也要有自己的一些乐趣. 昨天发表了一篇文章关于微信 8.0 动态的玩法,分享了一些壁纸,特别是那个迪迦奥特曼的都被玩坏了,好多都留言反应不够玩,今天最后在一篇关于微信动态的文章. 后 ...

  7. html动态图片怎么设背景,微信8.0状态背景视频怎么设置?状态视频动态背景图设置教程[多图]...

    微信8.0状态背景视频怎么设置?许多人可能都还并不是很了解微信8.0的我的状态功能要怎么设置动态的视频作为背景图.现在就让小编为各位分享,微信8.0状态背景视频设置教程. 微信8.0状态背景视频怎么设 ...

  8. 微信8.0状态背景视频合集

    微信8.0出了非常多的功能,例如最早被刷屏的动效表情,也是龙哥在直播中提到的功能,然后还有设置状态,随便说点什么就是一条状态. 但是很多人不知道这个状态可以设置视频背景,这就产生很多好玩的背景了,就像 ...

  9. Php 小视频存储,微信里的小视频怎样保存和下载

    微信里可以和好友间互发小视频,还可以分享到朋友圈,但是除了在微信里直接查看外,这些小视频到底保存在哪儿了?朋友圈里好友分享的小视频也能保存么? 今天,小编就整理了几个方法,教你如何查找和保存微信小视频 ...

最新文章

  1. each(callback)与each(object[,callback])的区别
  2. mysql的原理图解_图文并茂讲解Mysql事务实现原理
  3. 160个Crackme032用ProcessMonitor拆解KeyFile保护
  4. php72w redis,docker php7安装php-redis
  5. 机器学习入门01-K临近(KNN)的java实现
  6. SUS安装配置简明图解攻略
  7. linux raid
  8. WPS Office 免费版和专业增强版区别是什么
  9. python可视化窗口制作一个摇骰子游戏_通过构建一个简单的掷骰子游戏去学习怎么用 Python 编程...
  10. 物联网 毕业设计——方案选择
  11. 【软件技巧】【截图】浏览器自带的全网页截图工具
  12. python爬取加密qq空间_Python爬取qq空间说说
  13. day15-Linux的优化
  14. tomcat+eclipse +mysql搭建JSP开发环境
  15. 车载以太网 - SomeIP - 详细解析 - 02
  16. 用R语言画一朵玫瑰花
  17. 自动化立体仓库系统(Automated Storage and Retrieval System)
  18. 第十章 sed. 其他各章可察看相应的 link.
  19. 手机的“隔空打印”功能了解一下,不需要电脑也可以打印
  20. 园林工程计算机教程,园林设计全攻略电子教程第1章 园林设计与计算机制图.ppt...

热门文章

  1. java 微信 qq 登录_拾人牙慧篇之———QQ微信的第三方登录实现
  2. 不再拾人牙慧,来自己创造一个专家级别的神经网络吧!
  3. xshell下载日志命令_Xshell常用命令大全
  4. vs2015或vs2017报错未能安装包“Microsoft.VisualCpp.Redist.14,version=14.16.27012.2,chip=x86 错误代码55的解决办法!
  5. Visual Studio相关电子资料、软件汇总:
  6. 算法学习与填充计划---2023.2.21---夏目
  7. root教程ios,root教程华为荣耀20
  8. 微软不能关闭服务器,微软正在解决部分Surface Laptop用户遭遇的无法退出S模式的故障...
  9. html 如何制作图片链接
  10. React中ref的使用方法和使用场景(详解)