当前位置: 首页 > 后端技术 > Python

收藏抖音topics-music-userworks-likes+Python调用Aria2download+fire生成命令行

时间:2023-03-26 13:07:23 Python

开源仓库https://gitee.com/erma0/douyin抖音几秒收藏支付宝红包~Python取数据+Aria2根据抖音下载各种链接或者各种ID,通过网页界面采集视频作品,将作品下载到本地。支持用户主页链接或sec_uid、主题挑战和音乐配乐链接或ID。使用说明本程序是学习如何用Python调用Aria2的案例,仅供参考,请勿用于非法用途。2021.10.22测试仍在正常运行。测试环境:Win10_x64+Python3.8支持收藏收藏列表(仅部分用户可用,原因不明)TODO[x]收藏用户作品[x]调用Aria2下载[x]专题/原声作品收藏[x]喜欢作品收藏[x]]导入文件批量收藏[x]命令行调用[x]使用pywebview写接口界面写个大概,后来没时间搞定,就给了up[x]打包exe直接安装Python使用安装依赖打开程序目录下的命令行,输入pipinstall-rrequirements.txt使用命令行:exec.py直接运行查看命令列表,或者使用-h参数查看帮助pythonexec.pythonexec.pydownload-h可选参数--type指定下载类型,默认值:--type=user(收集用户作品)--limit指定下载数量collections,默认值:--limit=0(collectall)命令行例子收集一个用户的所有作品:pythonexec.py下载用户主页链接或secuid收集用户喜欢的前10名作品:pythonexec.py下载用户主页链接或secuid--type=like--limit=10收集某音乐配乐的前10名作品:pythonexec.py下载音乐链接或ID--type=music--limit=10收集一个主题挑战的所有作品:pythonexec.py下载主题挑战链接或ID--type=challenge收集所有用户作品在一个文件中批量:pythonexec.pydownload_batch文件路径(file一个链接或一行id)--type=用户知识点抖音相关网页界面已恢复,可一键取回数据。UID几乎没用,首页链接也拼不出来。所有接口都是sec_uidsignature,固定即可,不需要扣JS。作品直接包含无水印视频地址,无需手机UA跳转到主题/音乐作品号。2021.04.02点赞榜也有数据。Aria2相关的aria2p库体验还不错。大多数Aria2下载都是通过rpc接口实现的。还需要自己下载Aria2c.exe来启动服务,所以使用代码自动启动服务,如果文件已经存在则跳过下载:--auto-file-renaming=false是可行的,但是控制台会报错报错,虽然报错不影响-c是可行的,并且控制台不报错。添加下载任务时,通过指定options={'out':filename}来指定文件名,即-dAria2会根据指定的路径和文件名自动创建下载目录。Aria2的指定路径和文件名不能输入非法字符。字符串(*|等),所以我写了Download.title2path静态方法来监听事件,手动停止。如果不停止,进程就会被阻塞,导致程序无法关闭。没有找到实时获取任务进度和下载速度的功能。我自己写了一个循环监控回调方法。python相关通过os.popen或subprocess.Popen实现子进程开启程序,无接口,无阻塞继承父类后重写init时,通过super().__init__()调用父类构造方法,重写后的方法继承父类时,私有方法无法重写,私有成员参数也无法读取。指定类型提示很好用,方便调用参数时自动完成功能。可以通过os.environ中的if'PROGRAMFILES(X86)'来简单判断系统是否是64位Pylance的自动导入依赖功能很好用,但是感觉时间不对。重启后就可以使用vscode了。默认启动路径为当前项目路径。在launch.json中添加一句"cwd":"${fileDirname}"没错,但是相对目录无法自动补全pylance使用pipreqs一键生成当前项目依赖:cmd切换到项目path,pipreqs./--encoding=utf-8--force命令行模块fire最简单的方法是直接使用fire.Fire()暴露所有函数。如果通过类或对象暴露,则需要单独指定类参数。组合命令需要使用不同的类,暴露的类类中引入了需要使用组合命令的类,但是在这种批量下载的场景下感觉很繁琐,所以直接加了一个参数,用两个函数调用UI模块pywebview,可以暴露一个实例给页面js_api一个类,通过pywebview.api.func().then(()=>{})调用Python函数也可以将Flask等服务实例暴露给页面js_api(不带url参数),实现index.html在Python内部通过window.evaluate_js('JScode')调用UI中的JS方法,类的初始化不能传参,所以需要在UI中重新定义init,需要public的类实例方法不能下划线开头_创建UI时设置的窗口宽高好像和网页大小不一样,需要比网页大的值

猜你喜欢