Python采集X音用户作品+调用Aria2下载+fire生成命令行+Vue界面

网友投稿 358 2022-06-19


X音采集

开源仓库

https://gitee.com/erma0/douyin

介绍

Python取数据 + Vue写界面 + Aria2下载

根据X音各种链接或各种id,通过网页接口采集视频作品,并下载作品到本地。

支持用户主页链接或sec_uid/话题挑战和音乐原声链接或ID。

支持下载喜欢列表(需喜欢列表可见)。

① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)

当然在学习Python的道路上肯定会困难,没有好的学习资料,怎么去学习呢?

学习Python中有不明白推荐加入交流Q群号:928946953

群里有志同道合的小伙伴,互帮互助, 群里有不错的视频学习教程和PDF!

还有大牛解答!

使用

0x00 安装依赖

在程序目录打开命令行,输入

复制代码 隐藏代码

pip install -r requirements.txt

0x01 使用UI界面

双击打开启动.bat,或者在程序目录打开命令行,输入

复制代码 隐藏代码

python ui.py

0x02 直接修改douyin.py中相关参数使用

完全不懂Python的朋友用命令行或操作界面。

0x03 从命令行使用exec.py

直接运行可查看命令列表,或使用-h参数查看帮助 复制代码 隐藏代码

python exec.py python exec.py -h python exec.py download -h python exec.py download_batch -h

使用函数名调用程序 复制代码 隐藏代码

--type 指定下载类型,默认值:--type=user --limit 指定采集数量,默认值:--limit=0(不限制)例如采集某用户全部作品: 复制代码 隐藏代码

python exec.py download https://v.douyin.com/xxxx/ python exec.py download 用户的secuid例如采集某用户喜欢的前10个作品: 复制代码 隐藏代码

python exec.py download MS4wLjABAAAAl7TJWjJJrnu11IlllB6Mi5V9VbAsQo1N987guPjctc8 --type=like --limit=10 python exec.py download 用户的secuid例如采集某音乐原声前10个作品: 复制代码 隐藏代码

python exec.py download https://v.douyin.com/xxxx/ --type=music --limit=10 python exec.py download 音乐ID --type=music --limit=10

TODO

[x] 采集用户作品

[x] 调用Aria2下载

[x] 话题/原声作品采集

[x] 喜欢作品采集

[x] 导入文件批量采集

[x] 命令行调用

[x] 用webview写界面

[x] 打包exe 不打包了,直接装个Python环境更简单

知识点

X音相关

网页接口恢复了,一次请求即可取回数据

UID几乎没用了,拼不成主页链接了,所有接口都是sec_uid

signature可固定了,不用再扣JS了

作品中直接包含无水印视频地址了,不需要移动端UA也可跳转

话题/音乐作品数目

2021.04.02 喜欢列表也有数据了

Aria2相关

aria2p库使用体验还不错

大部分Aria2下载都是通过rpc接口实现的,这个也一样

需要自己下载Aria2c.exe来开启服务,所以要用代码实现自动启动服务

若文件已存在则跳过下载的方法:

--auto-file-renaming=false 可行,但控制台使用会报错,虽然报错不影响

-c 可行,且控制台不报错

添加下载任务时通过指定options = {'out': filename}指定文件名,即-d

Aria2会根据指定路径及指定文件名自动创建下载目录

Aria2指定路径及文件名中不能传入非法字符串(*|等),所以写了Download.title2path静态方法

监听事件要手动停止,不停止会阻塞进程,导致程序无法关闭

未发现实时获取任务进度及下载速度的函数,自己写了循环监听回调方法

Python相关

通过os.popen或subprocess.Popen实现子进程打开程序,无界面,不阻塞

继承父类后重写init时,通过super().init()调用父类构造方法

继承父类后重写方法时,不能重写私有方法,不能读取私有成员

参数指定类型提示挺好用,方便调用参数的函数时自动补全

可通过if 'PROGRAMFILES(X86)' in os.environ简单判断系统是否为64位

Pylance的自动导入依赖功能很好用,就是感觉时灵时不灵,重新开关后又可以用

vscode默认启动路径是当前项目路径,在launch.json中加一句"cwd": "${fileDirname}",即可,不过自动补全pylance就无法识别相对目录了

用pipreqs一键生成当前项目依赖:cmd切换到项目路径,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('JS代码')调用JS方法

在UI中,类的初始化无法传参,所以需要重新定义init

在UI中,需要公开的类实例方法不能以下划线_开头

创建UI时设置的窗口宽高,好像和网页中大小不一样,值需要比网页中大一些

X音采集部分源码


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python借助于AI来实现验证码识别,内含python3示例(python做验证码识别)
下一篇:Python爬虫能当副业吗?到了哪个层次能接单?解析能挣钱的方式(python爬虫兼职月入)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~