采集抖音话题/音乐/用户作品/喜欢+Python调用Aria2下载+fire一键生成命令行

Posted 二毛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了采集抖音话题/音乐/用户作品/喜欢+Python调用Aria2下载+fire一键生成命令行相关的知识,希望对你有一定的参考价值。

开源仓库

https://gitee.com/erma0/douyin

介绍

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

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

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

支持下载喜欢列表(需喜欢列表可见)
部分用户可下载喜欢列表(需喜欢列表可见),部分用户不可下载(即使喜欢列表可见也不行),目前不知道原因哈,猜测跟账号有关,不知道是设置问题还是账号注册日期问题(和sec_uid带不带下划线无关),测试账号结果见user.txt

测试环境:Python3.7+pip最新+Win10_x64

依赖安装失败自行百度或更换Python及pip版本解决;UI启动报错猜测是pywebview库调用的浏览器不兼容Vue;

使用

0x00 安装依赖

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

pip install -r requirements.txt

0x01 使用UI界面

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

python ui.py

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

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

有基础的可查看源码使用,或查看当前页源码,因为之前写的注释内容被注释掉了
<!--

  1. 实例化任务对象,可指定采集类型及采集作品数量,默认为用户作品、不限数量全部采集

    task = Task()  # 用户作品
    # task = Task(type=\'like\', limit=10)  # 用户喜欢(不可用)
    # task = Task(type=\'music\', limit=10)  # 音乐原声
    # task = Task(type=\'challenge\', limit=10)  # 话题挑战
  2. 下载

    1. 单个下载

      target = "要下载的链接或ID"
      task.download(target)
    2. 批量下载

      target = \'user.txt\'  # 文件路径
      task.download_batch(target)

    -->

    0x03 从命令行使用exec.py

  3. 直接运行可查看命令列表,或使用-h参数查看帮助

    python exec.py
    python exec.py -h
    python exec.py download -h
    python exec.py download_batch -h
  4. 使用函数名调用程序

    --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环境更简单

知识点

抖音相关

  • 网页接口恢复了,一次请求即可取回数据
  • UID几乎没用了,拼不成主页链接了,所有接口都是sec_uid
  • signature可固定了,不用再扣JS了
  • 作品中直接包含无水印视频地址了,不需要移动端UA也可跳转
  • 话题/音乐作品数目
  • 2021.04.02 喜欢列表也有数据了

Aria2相关

  • aria2p库使用体验还不错
  • 大部分Aria2下载都是通过rpc接口实现的,这个也一样
  • 需要自己下载Aria2c.exe来开启服务,所以要用代码实现自动启动服务
  • 若文件已存在则跳过下载的方法:

    1. --auto-file-renaming=false 可行,但控制台使用会报错,虽然报错不影响
    2. -c 可行,且控制台不报错
  • 添加下载任务时通过指定options = {\'out\': filename}指定文件名,即-d
  • Aria2会根据指定路径及指定文件名自动创建下载目录
  • Aria2指定路径及文件名中不能传入非法字符串(*|等),所以写了Download.title2path静态方法
  • 监听事件要手动停止,不停止会阻塞进程,导致程序无法关闭
  • 未发现实时获取任务进度及下载速度的函数,自己写了循环监听回调方法

Python相关

  • 通过os.popensubprocess.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时设置的窗口宽高,好像和网页中大小不一样,值需要比网页中大一些

以上是关于采集抖音话题/音乐/用户作品/喜欢+Python调用Aria2下载+fire一键生成命令行的主要内容,如果未能解决你的问题,请参考以下文章

怎么用Python爬取抖音小视频? 资深程序员都这样爬取的(附源码)

都说抖音是毒品软件?我用Python爬取了里面的小视频!

如何给抖音视频选择配乐?音乐是抖音作品重要的组成部分

无损音乐合集分享(一)154首

抖快排怎么让你的作品排名抖音搜索前十?

最全的抖音数据信息获取