Skip to content

Latest commit

 

History

History
145 lines (106 loc) · 7.3 KB

File metadata and controls

145 lines (106 loc) · 7.3 KB

非官方 TikTok Python API

这是一个针对 TikTok.com 的非官方 Python API 封装。使用此 API,你可以获取热门内容、抓取特定用户信息等更多数据。

DOI LinkedIn YouTube Discord

本 API 旨在从 TikTok 上“获取数据”。它不能用于代表用户在 TikTok 上“发布或上传”内容。它不支持任何需要用户身份验证的路由;如果你无法在“未登录状态”下通过浏览器完成的操作,这个库也无法完成。

赞助商

以下赞助商为展示位付费,或为我个人的联盟推广链接(可能会获得佣金)。除此之外,我与他们没有任何其他关联。TikTokAPI 包将始终保持免费、开源。

目录

文档

完整文档见:文档站点

快速开始

按照以下步骤开始使用本 API。

注意:如果你想系统学习网页爬虫,请查看我开源免费的课程:Everything Web Scraping

如何支持本项目

  • 给仓库点个 Star 😎
  • 考虑在 GitHub 上赞助
  • 给我发邮件,或在 LinkedIn 上告诉我你在用这个 API 做什么——我很乐意听到你的故事
  • 为 issue 提交 PR :)

安装

注意:需要 Python 3.9 及以上版本

如果遇到问题,请先查看仓库里的已关闭 issue;如果你发现久远的 issue 与现在的问题相同,也可以新开一个 issue。该代码库会受到 TikTok 更新的影响,有时需要一些时间来适配。

pip install TikTokApi
python -m playwright install

如果你更喜欢视频讲解,关于安装与设置可以看这段 YouTube 视频(版本可能略旧,但安装步骤相同)。

如果你想快速了解如何在 Python 中监听 TikTok Live 事件,也可以看这段短视频。

Docker 安装

将本仓库克隆到本地(或只拷贝 Dockerfile,因为它会从 pip 安装 TikTokApi),然后运行以下命令:

docker pull mcr.microsoft.com/playwright:focal
docker build . -t tiktokapi:latest
docker run -v TikTokApi --rm tiktokapi:latest python3 your_script.py

注意:以上示例假设你的脚本名为 your_script.py,且位于仓库根目录。

常见问题

  • 空响应异常(EmptyResponseException)——表示 TikTok 拦截了请求并检测到你是机器人。这可能来自你的环境设置或库本身

    • 你可能需要代理才能稳定抓取 TikTok。我做了一节代理课程,讲解住宅代理与数据中心代理的区别等内容
  • “Browser has no attribute …”——请确认已执行 python3 -m playwright install。若问题仍在,请参考 playwright-python 的快速上手指南

  • “API 方法返回协程(Coroutine)”——库中很多方法是异步的,请确保在你的程序中使用 await 正确调用

快速上手示例

下面是一个示例,用于获取 TikTok 上最新的热门视频。更多示例见 examples 目录。

注意:如果你想学习通过逆向工程进行网页抓取,请查看我开源免费的课程:Web Scraping with Reverse Engineering

from TikTokApi import TikTokApi
import asyncio
import os

ms_token = os.environ.get("ms_token", None) # 从 tiktok.com 的浏览器 Cookie 中获取你的 ms_token

async def trending_videos():
    async with TikTokApi() as api:
        await api.create_sessions(ms_tokens=[ms_token], num_sessions=1, sleep_after=3, browser=os.getenv("TIKTOK_BROWSER", "chromium"))
        async for video in api.trending.videos(count=30):
            print(video)
            print(video.as_dict)

if __name__ == "__main__":
    asyncio.run(trending_videos())

在仓库根目录下,使用 -m 方式可直接运行示例脚本:

python -m examples.trending_example

你可以通过 .as_dict 访问对象创建时的完整数据字典。对于视频对象,可能类似于这个示例。由于 TikTok 会不定期调整数据结构,建议在使用时先了解字典结构。