All Projects → panoslin → DouYinSpider

panoslin / DouYinSpider

Licence: other
Fiddler + Appium + Mitmproxy + Android Emulator

Programming Languages

python
139335 projects - #7 most used programming language
tcl
693 projects
c
50402 projects - #5 most used programming language
C++
36643 projects - #6 most used programming language
HTML
75241 projects
powershell
5483 projects

DouYinSpider

此Github包含三个抖音爬虫:

第一个为indepent目录下的模拟器版本,通过安卓模拟器,抓取抖音对应视频信息,此项目抓取的目标视频为抖音随机出现的 竖屏广告 实际使用时可以根据自身 测试学习 需求修改FlowCatch.py逻辑

第二个为douyin_api_feed目录下的API版本, 通过douyin的feed API (https://api.amemv.com/aweme/v1/feed/)获取视频信息。

二者比较, 第一个使用模拟器+Appium 可以很好的模拟真实浏览抖音的情况,并且不需要考虑加密参数的问题,但是占用较多的系统资源,效率低。第二个直接使用API请求json数据,能够极大的减少系统资源的占用,并且效率更高,除了Python以外不需要额外的依赖环境。

第三个为github用户loadchange的代码,位于amemv-crawler目录下:

“ 可以下载指定抖音用户的全部视频(含收藏),也可以下载指定主题(挑战)或音乐下的全部视频。”

其优势为爬取速度快,系统资源占用少,但是不能够筛选特定的视频,如此项目的仅下载 竖屏广告

以下分别对第1、2个爬虫展开讨论:

注意

这个项目是一个练手项目,源码仅作为和大家一起学习Python使用,你可以免费: 拷贝、分发和派生当前源码。你不可以用于商业目的及其他恶意用途

1. 模拟器版本

开发环境

  • Python3
  • Android environment
  • Appium
  • Mitmproxy

环境安装

  1. Android environment
    • 建议通过Android Studio安装JDK,配置环境变量
    • 安装JAVA SDK
    • 安卓模拟器: 常用的模拟器有
      • genymotion(收费)
      • 天天模拟器
      • 夜神模拟器
      • 领航模拟器
      • 这里使用天天模拟器作为测试
  2. Appium
    • Appium,为类似于Selenium的移动端测试工具,建议安装桌面版
  3. Python 依赖库:
    pip install -r requirement.txt

配置和运行

  1. 首先运行天天模拟器,通过adb连接模拟器(天天默认端口6555):在命令行输入
    adb connect 127.0.0.1:6555
    adb devices -l

    第一步连接模拟器端口,如果端口连接不成功,可到ttmnq\deployed\TianTian.vbox中查看host端口(hostport)
    第二步显示是否连接成功,成功则会显示已连接设备信息
    返回结果应该如下图表示连接成功: adb

  2. 通过模拟器内的“靠谱游戏”安装抖音App
  3. 安装Mitmproxy证书
    • 将C:\Users\UserName\.mitmproxy 目录下面的mitmproxy-ca-cert.cer拖动到模拟器界面上安装证书
    • 双击运行安装mitmproxy-ca-cert.p12,选择证书存储位置为“受信任的根证书颁发机构”
  4. 运行Appium服务器(默认端口4723)
  5. 分别开启两个命令行窗口,激活虚拟环境,进入indepent目录,命令行输入
    python AppiumControl.py
    mitmdump -s .\FlowCatcher.py

    此时模拟器便被Appium控制,自行打开抖音并且开始没日没夜的刷抖音。

2. API版本

开发环境

  • Python3

环境安装

  1. Python 依赖库:
pip install -r requirement.txt

配置和运行

  1. douyin_api_feed目录下包含了一个示例运行文件 (example.py) 与示例配置文件 (sample_config.ini),在命令行窗口直接运行python example.py,窗口首先会输出API返回的完整json数据,然后会连续输出6条通过feed_api/parser.py整理过后的抖音视频数据。

代码解析

通过parser整理完json数据之后,便需要考虑录入数据库与上传视频文件。

你可以根据自身需求修改一下代码:

  1. 入库
    feed_api/database_operation.py封装了入库的SQL语句,并且使用feed_api/mysql_switch.py作为装饰器将所有SQL语句作为一个事务一并提交

  2. 上传文件
    这里通过阿里云对象存储OSS作为例子:feed_api/integratedos.py封装了两个方**merge_dir(old_dst, new_dst)将old_dst目录下的文件与子目录移动至new_dst目录下read_status(path=None, simulate=True)**通过oss的上传工具获得当前的上传状态,path为上传工具所在路径

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].