Quay lại blog

Phân tích đối thủ cạnh tranh TikTok: Xây dựng báo cáo nội dung hàng tuần

Isabella Garcia
Isabella Garcia

Web Data Collection Specialist

02-Sep-2026

TL;DR:

  • Phân tích đối thủ TikTok bắt đầu với một tập tài khoản cố định. Ghi lại các tài khoản thương hiệu công khai nào thuộc về báo cáo trước khi thu thập bất kỳ bài đăng nào.
  • Các mẫu so sánh quan trọng hơn tổng số chưa được gán nhãn. Sử dụng cùng số lượng yêu cầu và khoảng thời gian thu thập cho mỗi tài khoản, sau đó công bố số lượng mục đã trả về.
  • Các danh mục nội dung cần quy tắc có thể xem xét. Lưu trữ các cụm từ và thẻ bắt đầu bằng nhau bên cạnh từng nhãn chủ đề để người xem có thể chỉnh sửa phân loại.
  • Trung vị làm giảm ảnh hưởng của một bài đăng viral. Báo cáo phân phối và nhịp độ mẫu quan sát được cùng với tổng số.
  • Báo cáo hàng tuần mô tả các mẫu đã quan sát. Nếu không có xác minh độ phủ toàn bộ, nó không thể tuyên bố tần suất đăng bài chính xác của một tài khoản.
  • Miễn phí để bắt đầu. Các tài khoản Scrapeless mới bao gồm tín dụng miễn phí; tạo tài khoản trong Bảng điều khiển Scrapeless.

Giới thiệu: báo cáo đối thủ thất bại ở bước lấy mẫu

Những nguồn cấp thương hiệu công khai dễ so sánh kém. Một tài khoản có thể đóng góp 30 bài đăng quan sát, một tài khoản khác 8, và một điểm ngoại lệ có thể chi phối mức độ tương tác trung bình. Một biểu đồ bóng bẩy không khắc phục được sự không khớp đó.

Quy trình này xây dựng một báo cáo nội dung đối thủ TikTok hàng tuần từ các tài khoản công khai được chọn. Nó thu thập các mẫu bài đăng có giới hạn, gán nhãn nội dung với các quy tắc đơn giản có thể xem xét, tóm tắt mức độ tương tác với các giá trị trung vị và khoảng, và làm cho phạm vi thu thập trở nên rõ ràng trong báo cáo cuối cùng.

Sử dụng hướng dẫn phân tích người ảnh hưởng TikTok khi tập tài khoản được tạo thành từ các nhà sáng tạo thay vì các đối thủ thương hiệu.

Quy trình tóm tắt

Một quy trình phân tích đối thủ TikTok thực tế có năm giai đoạn:

  1. Xác định danh sách đối thủ và khoảng thời gian báo cáo.
  2. Giải quyết từng tên người dùng công khai thành sec_uid.
  3. Thu thập cùng một mẫu bài đăng có giới hạn cho mỗi tài khoản.
  4. Phân loại mô tả và thẻ bắt đầu bằng với các quy tắc minh bạch.
  5. Tập hợp mẫu đã quan sát thành một báo cáo hàng tuần.

Quy trình lưu trữ các phản hồi thô và các hàng đã chuẩn hóa trước khi tính toán bất kỳ tóm tắt nào. Sự tách biệt đó ngăn chặn sự thay đổi báo cáo từ việc buộc phải thực hiện một lượt thu thập khác.

Điều kiện tiên quyết

  • Một tài khoản Scrapeless và mã thông báo API từ Bảng điều khiển Scrapeless
  • Python 3 với thư viện tiêu chuẩn của nó
  • Danh sách được xem xét các tên người dùng thương hiệu công khai
  • Số lượng bài đăng yêu cầu cố định và một dấu thời gian thu thập
  • Một từ điển danh mục nhỏ mà con người có thể kiểm tra
  • Một mã thông báo sống được xuất dưới dạng SCRAPELESS_API_KEY cho mã bên dưới

Ví dụ được lắp ráp được đánh dấu là một khoảng trống điều kiện tiên quyết vì nó cần thông tin đăng nhập API của độc giả và các tài khoản đã chọn. Logic chuyển đổi được bao gồm, nhưng bài viết không chứa thông tin đăng nhập riêng tư hoặc đầu ra diễn viên giả mạo.

Giai đoạn 1: Xác định một bộ đối thủ có thể so sánh

Danh sách đối thủ là một phần của đặc tả báo cáo. Giao cho mỗi tài khoản một nhãn nội bộ ổn định, một tên người dùng công khai, lý do mà nó được bao gồm, và ngày mà danh sách đã được phê duyệt. Tránh việc âm thầm thêm một nhà xuất bản lớn hoặc một nhà sáng tạo cá nhân vào một tập hợp các tài khoản thương hiệu có kích thước tương tự vì khối lượng nội dung của nó sẽ làm biến dạng sự so sánh.

Một danh sách ngắn gọn có thể trông như thế này:

account_label username inclusion_reason
Thương hiệu A brand_a Đối thủ trong cùng danh mục trực tiếp
Thương hiệu B brand_b Cùng đối tượng và phân khúc giá
Thương hiệu C brand_c Tham chiếu danh mục liền kề

Giữ cho danh sách do người dùng cung cấp. Các diễn viên được sử dụng ở đây không phát hiện ra một thị trường cạnh tranh hoàn chỉnh hoặc chứng minh rằng hai tài khoản cạnh tranh về mặt thương mại.

Giai đoạn 2: Thu thập cùng một mẫu bài đăng có giới hạn

Giai đoạn thu thập giải quyết từng tên người dùng thông qua scraper.tiktok.user.detail, sau đó cung cấp sec_uid đã trả về cho scraper.tiktok.user.work. Yêu cầu bài đăng chấp nhận cursorcount; quy trình này bắt đầu tại con trỏ đã được tài liệu hóa "0" với cùng số lượng yêu cầu cho mỗi tài khoản.

Lưu trữ số lượng yêu cầu và số lượng đã trả về riêng biệt. Nếu một tài khoản trả về ít mục có thể sử dụng hơn, đừng làm đầy số liệu của nó với các hàng có giá trị bằng không. Công bố sự khác biệt trong báo cáo hàng tuần.

Phản hồi bài đăng có thể bao gồm mô tả, thẻ bắt đầu bằng, thời gian tạo, số lượt xem công khai và số lượng tương tác, URL, trạng thái ghim, ngôn ngữ, nhạc, phụ đề và các trường phương tiện. Các giá trị tùy chọn có thể rỗng. Một giá trị bị thiếu nên giữ nguyên là bị thiếu cho đến khi ngữ nghĩa của nguồn biện minh cho một diễn giải khác.

Bắt đầu Lấy Dữ Liệu với Scrapeless

Tăng cường quy trình thu thập dữ liệu web và tự động hóa của bạn với Scrapeless!
Đăng ký ngay hôm nay và nhận 5 đô la tín dụng miễn phíkhông yêu cầu thẻ tín dụng.
Nhận tín dụng miễn phí ngay bây giờ tại Scrapeless Dashboard.

Giai đoạn 3: Phân loại Nội dung Với Các Quy tắc Có thể Xem lại

Phân loại nội dung nên bảo tồn bằng chứng đứng sau mỗi nhãn. Một bảng quy tắc đơn giản thường đủ cho một báo cáo hoạt động hàng tuần:

Chủ đề Cụm từ mô tả Hashtags
Giáo dục sản phẩm how to, tips, explained tutorial, howto
Ra mắt new, introducing, available now launch, newproduct
Khuyến mãi sale, discount, limited offer sale, deal
Cộng đồng duet, challenge, your turn challenge, community

Những nhãn này là các quy tắc biên tập, không phải là sự thật do người diễn viên cung cấp. Lưu lại thuật ngữ trùng khớp và cho phép uncategorized khi không có quy tắc nào phù hợp. Một người đánh giá sau đó có thể phân biệt lỗi phân loại với lỗi thu thập.

Các nhãn dựa trên quy tắc cũng tiết lộ sự chồng chéo. Một bài đăng có thể thảo luận về việc ra mắt sản phẩm và một chương trình khuyến mãi cùng lúc. Hoặc cho phép nhiều nhãn hoặc xác định một thứ tự ưu tiên đã được tài liệu hóa; đừng để thứ tự từ điển quyết định một cách vô hình.

Giai đoạn 4: Tóm tắt Tương tác và Nhịp đã Quan sát

Số lượng tương tác công cộng là những quan sát tích lũy được ghi lại vào thời điểm thu thập. So sánh chúng trong mẫu đã công bố thay vì coi chúng là một thước đo hoàn chỉnh về hiệu suất thương hiệu.

Các trường thông tin theo tài khoản hữu ích bao gồm:

  • Số lượng bài đăng trở lại
  • Thời gian tạo sớm nhất và muộn nhất trong mẫu đã quan sát
  • Số lượng phát, thích, bình luận và chia sẻ trung vị
  • Giá trị tối thiểu và tối đa để hiển thị độ phân tán
  • Tỷ lệ chủ đề trong mẫu đã phân loại
  • Số lượng bài đăng ghim trong mẫu
  • Khoảng trống quan sát giữa các ngày bài đăng theo mẫu liền kề

Tài liệu module thống kê của Python định nghĩa thao tác trung vị được sử dụng trong việc triển khai. Một giá trị trung vị đưa ra giá trị quan sát giữa và hạn chế ảnh hưởng của một bài đăng quá lớn, nhưng nó không loại bỏ thiên lệch trong mẫu.

Nhịp đăng bài cần cách diễn đạt cẩn thận. Nếu mẫu thu thập không chứng minh được việc bao phủ hoàn chỉnh của khoảng thời gian báo cáo, hãy báo cáo “các bài đăng quan sát được trong mẫu thu thập” và khoảng thời gian giữa các mục sớm nhất và muộn nhất của nó. Đừng trình bày con số đó như tần suất đăng bài hàng tuần chính xác của tài khoản.

Giai đoạn 5: Lắp ráp Dòng chảy Python

Kịch bản dưới đây thu thập một mẫu ban đầu cố định cho mỗi tên người dùng đã cung cấp, gán một hoặc nhiều chủ đề nội dung và viết cả hàng mức bài đăng và tổng quan mức tài khoản. Tài liệu module CSV của Python đề cập đến định dạng xuất khẩu, và Cấu trúc Bảo mật của NIST cung cấp một cấu trúc hữu ích cho các quyết định truy cập, giữ lại và giảm thiểu dữ liệu.

Lưu ý: Mã dưới đây yêu cầu một mã thông báo API Scrapeless trực tiếp trong SCRAPELESS_API_KEY và tên người dùng công cộng thật được cung cấp bởi người đọc.

python Copy
import csv
import json
import os
from datetime import datetime, timezone
from statistics import median
from urllib.request import Request, urlopen

ENDPOINT = "https://api.scrapeless.com/api/v1/scraper/request"
TOKEN = os.environ["SCRAPELESS_API_KEY"]
ACCOUNTS = [name.strip().lstrip("@") for name in os.environ[
    "TIKTOK_COMPETITOR_USERNAMES"
].split(",") if name.strip()]
REQUESTED_COUNT = 20

THEMES = {
    "product_education": {"how to", "tips", "explained", "tutorial", "howto"},
    "launch": {"new", "introducing", "available now", "launch", "newproduct"},
    "promotion": {"sale", "discount", "limited offer", "deal"},
    "community": {"duet", "challenge", "your turn", "community"},
}


def run_actor(actor, actor_input):
    data = json.dumps({"actor": actor, "input": actor_input}).encode()
    request = Request(
        ENDPOINT,
        data=data,
        headers={"x-api-token": TOKEN, "content-type": "application/json"},
        method="POST",
    )
    with urlopen(request, timeout=60) as response:
        return json.load(response)


def labels_for(item):
    hashtag_values = []
    for tag in item.get("hashtags") or []:
        hashtag_values.append(
            str(tag.get("name", "")) if isinstance(tag, dict) else str(tag)
        )
    searchable = " ".join([
        str(item.get("description") or ""),
        " ".join(hashtag_values),
    ]).lower()
    labels = [
        theme for theme, terms in THEMES.items()
        if any(term in searchable for term in terms)
    ]
    return labels or ["uncategorized"]


def metric(item, name):
    value = item.get(name)
    return value if isinstance(value, (int, float)) else None


collected_at = datetime.now(timezone.utc).isoformat()
rows = []

for username in ACCOUNTS:
    profile = run_actor("scraper.tiktok.user.detail", {"unique_id": username})
    response = run_actor(
        "scraper.tiktok.user.work",
        {"sec_uid": profile["sec_uid"], "cursor": "0", "count": REQUESTED_COUNT},
    )
    with open(f"{username}-posts-raw.json", "w", encoding="utf-8") as raw_file:
        json.dump(response, raw_file, ensure_ascii=False, indent=2)
    for item in response.get("items") or []:
        rows.append({
            "account": username,
            "collected_at": collected_at,
            "requested_count": REQUESTED_COUNT,
            "post_id": str(item.get("id") or item.get("post_id") or ""),
            "post_url": item.get("url") or item.get("post_url") or "",
            "created_at": item.get("create_time") or item.get("date") or "",
            "themes": "|".join(labels_for(item)),
            "play_count": metric(item, "play_count"),
            "like_count": metric(item, "like_count"),
            "comment_count": metric(item, "comment_count"),
            "share_count": metric(item, "share_count"),
            "is_pinned": item.get("is_pinned"),
        })

with open("competitor-posts.csv", "w", newline="", encoding="utf-8") as output:
    writer = csv.DictWriter(output, fieldnames=rows[0].keys() if rows else ["account"])
    writer.writeheader()
    writer.writerows(rows)

with open("competitor-weekly-summary.csv", "w", newline="", encoding="utf-8") as output:
    fields = ["account", "observed_posts", "median_plays", "median_likes"]
    writer = csv.DictWriter(output, fieldnames=fields)
    writer.writeheader()
    for username in ACCOUNTS:
        account_rows = [row for row in rows if row["account"] == username]
        plays = [row["play_count"] for row in account_rows if row["play_count"] is not None]
        likes = [row["like_count"] for row in account_rows if row["like_count"] is not None]
        writer.writerow({
            "account": username,
            "observed_posts": len(account_rows),
            "median_plays": median(plays) if plays else "",
            "median_likes": median(likes) if likes else "",
        })

Tóm tắt cố ý nói observed_posts. Mở rộng nó với số lượng chủ đề, phạm vi giá trị và khoảng thời gian mẫu sau khi xác nhận đại diện thời gian chính xác trong phản hồi trực tiếp.

Mẫu Báo cáo Nội dung Cạnh tranh Hàng tuần

Một báo cáo hữu ích có thể vừa vặn trên một trang trước phụ lục:

Phần Bao gồm Ghi chú phạm vi
Tóm tắt thu thập Danh sách tài khoản, thời gian thu thập, số lượng yêu cầu và trả lại Nêu rõ rằng kết quả bao gồm các mẫu đã thu thập
Hỗn hợp nội dung Số lượng và tỷ lệ chủ đề, tỷ lệ không được phân loại Đính kèm từ điển quy tắc hiện tại
Tương tác Trung vị và khoảng độ theo chỉ số và tài khoản Số lượng công cộng tích lũy tại thời điểm thu thập
Nhịp Ngày bài đăng quan sát và khoảng trống Đừng tuyên bố tần suất toàn kỳ mà không có bao phủ
Bài đăng đáng chú ý URL bài đăng, chủ đề, ngữ cảnh chỉ số, ghi chú của người xem xét Tách rời quan sát khỏi diễn giải
Hành động Các câu hỏi cần kiểm tra trong báo cáo tiếp theo Tránh sao chép tài sản sáng tạo được bảo vệ

Đặt các hàng mức bài đăng vào một phụ lục hoặc CSV liên kết. Báo cáo chính nên cho phép người đọc theo dõi mọi kết luận đến một tài khoản mẫu, URL bài đăng, thời gian thu thập và quy tắc phân loại.

Xử lý Dữ liệu Tài khoản Công cộng Một Cách Có Trách Nhiệm

Một hồ sơ công cộng vẫn có thể chứa dữ liệu cá nhân. Giới hạn tập hợp tài khoản cho mục đích báo cáo, hạn chế quyền truy cập vào các phản hồi thô, xác định lịch trình xóa và tránh suy luận về các đặc điểm nhạy cảm từ chú thích, ngôn ngữ hoặc nội dung hình ảnh.

Phân tích đối thủ nên mô tả các mẫu nội dung quan sát được. Nó không nên tái xuất bản truyền thông, bắt chước công việc sáng tạo được bảo vệ, hoặc gán ý định ẩn cho một thương hiệu hoặc nhà sáng tạo. Giữ việc xem xét của con người trong quy trình cho các nhãn có thể ảnh hưởng đến các quyết định thương mại.
Scrapeless cung cấp các diễn viên thu thập thông qua Scraping API. Kiểm tra trang giá hiện tại khi dịch các tài khoản yêu cầu và số lượng mẫu thành một kế hoạch sản xuất.

Kết luận: làm cho sự so sánh có thể kiểm toán

Phân tích đối thủ TikTok trở nên hữu ích khi mỗi con số mang theo ý nghĩa của nó. Sửa danh sách tài khoản, yêu cầu các mẫu có thể so sánh, bảo tồn các phản hồi thô, phơi bày các quy tắc phân loại và báo cáo các số trung bình với số lượng đã trả lại. Kết quả là một báo cáo nội dung hàng tuần hỗ trợ xem xét mà không giả vờ rằng mẫu là một cái nhìn đầy đủ về mỗi tài khoản.

Sẵn sàng để Xây dựng một Báo cáo Đối thủ Hàng tuần?

Tham gia Scrapeless Discord hoặc cộng đồng Telegram để thảo luận về các mẫu thu thập và báo cáo. Tạo một tài khoản trong Scrapeless Dashboard khi danh sách và chính sách mẫu đã sẵn sàng.

Câu hỏi thường gặp

Q: Phân tích đối thủ TikTok là gì?

Phân tích đối thủ TikTok so sánh nội dung công khai có thể quan sát và các mẫu tương tác trên một tập hợp tài khoản do người dùng định nghĩa. Một báo cáo có thể bảo vệ cũng ghi rõ thời gian thu thập, kích thước mẫu và quy tắc phân loại.

Q: Các chỉ số nào thuộc về một báo cáo đối thủ hàng tuần?

Một báo cáo đối thủ hàng tuần có thể bao gồm số lượng bài đăng quan sát được, khoảng thời gian mẫu, sự pha trộn chủ đề nội dung, số lượng tương tác công khai trung bình, khoảng dao động và liên kết đến các bài đăng nổi bật. Mỗi chỉ số nên được đánh dấu là một quan sát mẫu.

Q: Liệu mẫu có thể cho thấy tần suất đăng bài chính xác không?

Mẫu chỉ cho thấy tần suất đăng bài chính xác khi việc thu thập đã xác minh được độ phủ hoàn chỉnh của khoảng thời gian đã nêu. Nếu không, báo cáo các ngày quan sát được và khoảng trống trong mẫu đã thu thập.

Q: Tại sao sử dụng số trung bình thay vì số trung bình cộng?

Số trung bình giảm ảnh hưởng của một giá trị quan sát bất thường lớn. Nó vẫn phụ thuộc vào chất lượng mẫu, vì vậy hãy công bố số lượng mẫu và phạm vi bên cạnh nó.

Q: Quy trình cần một trình phân tích trình duyệt hoặc cấu hình proxy không?

API trả về các trường tài khoản công khai và bài đăng được hỗ trợ cho các định danh đã cung cấp. Dòng báo cáo vẫn xác định các tài khoản, giới hạn mẫu, lưu trữ, phân loại và xem xét.

Q: Việc thu thập nội dung đối thủ công khai có hợp pháp không?

Tính hợp pháp phụ thuộc vào khu vực pháp lý, mục đích, dữ liệu, phương pháp truy cập và các điều khoản áp dụng. Chỉ thu thập các trường công khai cần thiết, tôn trọng quyền sở hữu trí tuệ, giới hạn thời gian lưu giữ và nhận tư vấn pháp lý cho mục đích cụ thể.

Tại Scrapless, chúng tôi chỉ truy cập dữ liệu có sẵn công khai trong khi tuân thủ nghiêm ngặt các luật, quy định và chính sách bảo mật trang web hiện hành. Nội dung trong blog này chỉ nhằm mục đích trình diễn và không liên quan đến bất kỳ hoạt động bất hợp pháp hoặc vi phạm nào. Chúng tôi không đảm bảo và từ chối mọi trách nhiệm đối với việc sử dụng thông tin từ blog này hoặc các liên kết của bên thứ ba. Trước khi tham gia vào bất kỳ hoạt động cạo nào, hãy tham khảo ý kiến ​​cố vấn pháp lý của bạn và xem xét các điều khoản dịch vụ của trang web mục tiêu hoặc có được các quyền cần thiết.

Bài viết phổ biến nhất

Danh mục