乐趣区

关于python:采集抖音话题音乐用户作品喜欢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 时设置的窗口宽高,如同和网页中大小不一样,值须要比网页中大一些
退出移动版