Giter Site home page Giter Site logo

douyin's Introduction

抖音采集

花几秒钟领个支付宝红包吧~

介绍

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

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

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

常见问题

2021.10.09测试仍能正常采集用户作品。

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

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

依赖安装失败自行百度或更换Python及pip版本解决;

UI启动报错是pywebview库调用的浏览器不兼容Vue(win7下默认调用IE,不兼容ES6语法);

由于在这项目下面评论平台不会通知我、扫码赞助留言我又没法回复,所以有问题请提交issue,或者加QQ留言,或者到https://support.qq.com/product/358554反馈,这几种方式我都可以看到且能回复。

使用

0x00 安装依赖

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

pip install -r requirements.txt

0x01 使用UI界面

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

python ui.py

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

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

有基础的可查看源码或查看此md文件,之前写的内容被注释掉了

0x03 从命令行使用exec.py

  1. 直接运行可查看命令列表,或使用-h参数查看帮助
    python exec.py
    python exec.py -h
    python exec.py download -h
    python exec.py download_batch -h
    
  2. 使用函数名调用程序
    --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

  • 采集用户作品
  • 调用Aria2下载
  • 话题/原声作品采集
  • 喜欢作品采集
  • 导入文件批量采集
  • 命令行调用
  • 用webview写界面
  • 打包exe 不打包了,直接装个Python环境更简单

支持作者

扫支付宝红包码,白嫖红包,你好我也好

红包码

或者可以扫这个

支付宝微信收款


知识点

抖音相关

  • 网页接口恢复了,一次请求即可取回数据
  • UID几乎没用了,拼不成主页链接了,所有接口都是sec_uid
  • signature可固定了,不用再扣JS了
  • 作品中直接包含无水印视频地址了,不需要移动端UA也可跳转
  • 话题/音乐作品数目
  • 2021.04.02 喜欢列表也有数据了
  • 2021.10.09 几个月之前抖音出了web版,理论上采集评论等数据简单多了,但是此项目未更新,有类似需求请移步。

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重写一版,于是就有了这篇介绍。

Python入门水平加懒癌晚期的我,从10号开始有具体想法,用了差不多3天的碎片化时间构思了程序结构(主要是了解面向对象思维),看了不少文档。

私以为自己写一个下载功能不如直接调用Aria2,毕竟功能强大且稳定,但是网上没有找到多少Python调用Aria2的示例,只好在pypi找了个还在维护的看起来不错的库(aria2p),把文档翻了一遍,强行学习了一波。

我还从来没有写过类,这是第一次,对着文档和网上的各种文章,勉强按照理解写了出来。现在觉得,其实写不写类都一样能写出同样的功能,代码也差不了多少,不过函数比较多的时候,如果不用类,会比较乱(上一版易语言的就是,很长时间不看,自己再看都头疼),类的优势还有一点,就是公有属性。

面向对象编程确实有优势,先抽象化出类,再去实例化对象,代码结构一目了然,再加上继承什么的,确实很强大。

12号晚上开始敲代码,13号差不多写出来用户作品采集和下载功能,接着14号写了话题和音乐下载,同时完成了命令行。测试通过后,就不太想动了,直到今天16号,终于把介绍写出来了。界面暂时不写了,打包exe等明天后天或者大后天晚上再做。

可以说这次重新学了很多东西,不过根据过往经验,大概没几天就全忘了,没办法,就这样吧。

2021.03.16


拖了差不多3周,终于把UI写了点。

清明节前一天晚上开始动的,结果一晚上就改了几行代码,啥也没写,到前天晚上才又开始写。然后一通百度,两三天晚上写出来这点东西。

而且这次发现,之前不能采集用户喜欢,不是接口问题,是因为用户设置了隐藏,这没办法,不过用户公开的(比如自己)是可以采集喜欢的。

其实好久之前就想过HTML做界面了,当时是想用精易web浏览器来加载页面的,后来写Python还专门找miniblink的库。当时找到了一个更新比较活跃的,但是已经忘了叫什么了,因为在找的过程中发现了pywebview这个库,感觉挺强大的,也比较完善,还不用自己带浏览器内核,所以才有这次尝试。

界面只写了基础功能,限制采集数量没写,就一个input,但是感觉丑,就不加了。

不打算打包exe了,浪费时间,打包了还很大。况且Python环境安装很简单,百度一堆教程,其实无脑点下一步就行了。

这个软件到这里差不多就算完了,以后有机会写个快手的。

2021.04.08


douyin's People

Contributors

erma0 avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.