🎯 Trình duyệt đám mây tùy chỉnh, chống phát hiện được hỗ trợ bởi Chromium tự phát triển, thiết kế dành cho trình thu thập dữ liệu webtác nhân AI. 👉Dùng thử ngay
Quay lại blog

Cách thu thập dữ liệu TikTok mà không bị chặn

Emily Chen
Emily Chen

Advanced Data Extraction Specialist

15-Jun-2026

Những điểm chính:

  • TikTok gửi dữ liệu của mình ở trang, sau đó tải phần còn lại qua XHR. Các hồ sơ và bài đăng đầu tiên nằm trong một blob JSON #__UNIVERSAL_DATA_FOR_REHYDRATION__; các bình luận và bài đăng sâu hơn xuất hiện dưới dạng XHR được kích hoạt khi cuộn mà bạn bắt từ mạng.
  • Vùng miền là một phần trong việc có được một bản render sạch. Cùng một hồ sơ bị hết thời gian từ một vùng xuất có thể được render ngay lập tức từ vùng khác — cố định proxyCountry và cho phiên đủ TTL để các XHR tải đến.
  • Bạn trích xuất từ mạng, không phải đoán các bộ chọn. Lắng nghe các phản hồi xhr/fetch trong khi trang cuộn và phân tích JSON mà TikTok đã trả về — không cần phải quét DOM dễ vỡ của lưới video.
  • TikTok đánh dấu rất kỹ, vì vậy trình duyệt phải là thật. Chạy trên Scrapeless Scraping Browser — Chromium chống phát hiện với vùng xuất trong dân cư — là điều giúp cho việc tải nước xảy ra hoàn toàn.
  • Một phiên, năm bề mặt. Hồ sơ, bài đăng, bình luận, tìm kiếm và kênh đều giảm thành cùng một mô hình render-rồi-trích xuất qua một phiên đám mây duy nhất.
  • Miễn phí để bắt đầu. Tài khoản Scrapeless mới bao gồm thời gian chạy Scraping Browser miễn phí — đăng ký tại app.scrapeless.com.

Giới thiệu: TikTok lưu trữ dữ liệu của nó ở đâu

TikTok render các trang web của mình qua hai giai đoạn. HTML ban đầu mang một hòn đảo JSON lớn — một blob <script id="__UNIVERSAL_DATA_FOR_REHYDRATION__"> — chứa hồ sơ, số liệu thống kê và trang đầu tiên của các bài đăng. Mọi thứ sau đó (các bài đăng thêm khi bạn cuộn, các chuỗi bình luận, các trang tìm kiếm) được lấy qua XHR sau khi trang khởi động. Vì vậy, việc quét TikTok là hai kỹ thuật: đọc JSON tái cấp nước cho những gì đã có sẵn và bắt các phản hồi XHR cho những gì được tải theo yêu cầu.

Cả hai giai đoạn đều phụ thuộc vào việc TikTok tin rằng một trình duyệt thật đang điều khiển. Nền tảng này đánh dấu rất kỹ, và một yêu cầu HTTP đơn giản hoặc một trình duyệt headless mặc định nhận được một shell mà không có dữ liệu sử dụng được. Bản render đơn giản là không hoàn tất.

Hướng dẫn này chạy trên Scrapeless Scraping Browser — một trình duyệt đám mây chống phát hiện mà kết hợp Chromium tự phát triển với các proxy dân cư — kết nối với Puppeteer qua CDP. Việc trích xuất hồ sơ bên dưới đã được bắt trong thời gian thực; các mẫu bài đăng và bình luận sử dụng cùng một cách tiếp cận render-rồi-đọc-mạng. Chỉ dữ liệu công khai suốt quá trình.


Những gì bạn có thể làm với nó

  • Kéo một hồ sơ người sáng tạo — tiểu sử, xác thực, số lượng người theo dõi/tim video — từ JSON tái cấp nước.
  • Thu thập các bài đăng của người sáng tạo với biểu ngữ, siêu dữ liệu video, tác giả và số liệu thống kê tương tác.
  • Quét các chuỗi bình luận với văn bản, số lượng thích, số lượng trả lời và tay cầm tác giả.
  • Chạy tìm kiếm theo từ khóa và bắt kết quả.
  • Đi qua một nguồn tin kênh/hashtag với cùng một vòng lặp cuộn và bắt.

Tại sao chọn Scrapeless Scraping Browser

Scrapeless Scraping Browser là một trình duyệt đám mây tùy chỉnh, chống phát hiện được thiết kế cho các trình thu thập web và tác nhân AI. Đối với TikTok cụ thể, nó mang lại:

  • Chromium tự phát triển — một động cơ thật, vì vậy JSON tái cấp nước có thể lấp đầy và các XHR được kích hoạt.
  • Đánh dấu chống phát hiện — phiên đọc như một trình duyệt bình thường, vì vậy TikTok phục vụ dữ liệu thật thay vì một shell rỗng.
  • Proxy dân cư tại hơn 195 quốc gia — cố định vùng xuất theo quốc gia để trang có thể render sạch sẽ và nhất quán.
  • TTL phiên có thể cấu hình — giữ phiên sống đủ lâu cho các XHR kích hoạt khi cuộn trước khi thu hồi.
  • Kết nối Puppeteer chuẩn — tạo một phiên với SDK, sau đó puppeteer.connect() qua CDP; việc trích xuất của bạn là Puppeteer thuần túy.

Nhận khóa API của bạn trên kế hoạch miễn phí tại app.scrapeless.com.


Các điều kiện tiên quyết

  • Node.js 18 hoặc mới hơn
  • Tại khoản Scrapeless và khóa API — đăng ký tại app.scrapeless.com
  • Kiến thức cơ bản về Puppeteer và JSON

Cài đặt

bash Copy
npm install @scrapeless-ai/sdk puppeteer-core
bash Copy
export SCRAPELESS_API_KEY="your_api_token_here"

Bước 1 — Tạo một phiên và kết nối Puppeteer

SDK tạo phiên đám mây (nơi bạn cố định quốc gia proxy và TTL) và trả về một điểm cuối WebSocket; Puppeteer kết nối với nó qua CDP:

javascript Copy
import { Scrapeless } from '@scrapeless-ai/sdk';
import puppeteer from 'puppeteer-core';

const client = new Scrapeless({ apiKey: process.env.SCRAPELESS_API_KEY });

const { browserWSEndpoint } = await client.browser.create({
  proxyCountry: 'US',   // cố định vùng xuất — vùng ảnh hưởng đến việc trang render
  sessionTTL: 300,      // giây; đủ lâu cho các XHR tải đến
});

const browser = await puppeteer.connect({ browserWSEndpoint });
const page = await browser.newPage();

Một ghi chú từ thực tế khi chạy điều này: cùng một hồ sơ mà liên tục hết thời gian từ một vùng xuất có thể được render ngay từ lần thử đầu tiên từ một vùng khác. Nếu một render bị treo, hãy chuyển proxyCountry trước bất cứ điều gì khác.


Bước 2 — Quét một hồ sơ từ JSON tái cấp nước

Dưới đây là bản dịch của văn bản tiếng Anh:


Hồ sơ, số liệu thống kê và các bài viết đầu tiên đã có sẵn trên trang khi nó tải — bên trong thẻ script #__UNIVERSAL_DATA_FOR_REHYDRATION__. Hãy chờ nút đó, phân tích nó và đọc phạm vi webapp.user-detail:

javascript Copy
await page.goto('https://www.tiktok.com/@oddanimalspecimens', {
  waitUntil: 'domcontentloaded',
  timeout: 120000,
});
await page.waitForSelector('#__UNIVERSAL_DATA_FOR_REHYDRATION__', { timeout: 60000 });

const userInfo = await page.evaluate(() => {
  const el = document.getElementById('__UNIVERSAL_DATA_FOR_REHYDRATION__');
  const data = JSON.parse(el.textContent);
  return data.__DEFAULT_SCOPE__['webapp.user-detail'].userInfo;
});

console.log(userInfo.user.uniqueId, '—', userInfo.stats);

Điều này trả lại đối tượng userInfo của TikTok nguyên văn — một đối tượng user và một đối tượng stats. Không cần thu thập DOM; bạn đang đọc dữ liệu mà TikTok cung cấp để tạo trang của chính nó.

Nhận khóa API miễn phí của bạn tại: app.scrapeless.com


Bước 3 — Ghi lại bài viết và bình luận từ XHR

Các bài viết sau trang đầu tiên và tất cả các chuỗi bình luận, đến dưới dạng XHR sau khi trang tải và khi bạn cuộn. Mô hình là gắn một trình lắng nghe response trước khi điều hướng, cuộn để kích hoạt các yêu cầu, sau đó phân tích các thân JSON:

javascript Copy
const xhrCalls = [];
page.on('response', async (resp) => {
  const rt = resp.request().resourceType();
  if (rt !== 'xhr' && rt !== 'fetch') return;
  try {
    xhrCalls.push({ url: resp.url(), body: await resp.text() });
  } catch { /* một số thân không thể đọc được; bỏ qua */ }
});

await page.goto('https://www.tiktok.com/@oddanimalspecimens', { waitUntil: 'domcontentloaded' });

// Cuộn xuống để kích hoạt các bài viết/bình luận được tải lười
for (let i = 0; i < 5; i++) {
  await page.evaluate(() => window.scrollBy(0, document.body.scrollHeight));
  await new Promise((r) => setTimeout(r, 2000));
}

// Lọc danh sách đầu mối bài viết/bình luận và JSON.parse các thân
const itemLists = xhrCalls.filter((c) => /\/api\/(post|comment)\//.test(c.url));

Từ đó bạn JSON.parse từng thân đã ghi lại và lấy các mảng bài viết hoặc bình luận. Đây là cách tiếp cận vẽ sau đó đọc mạng giống như hồ sơ, chỉ khác ở chỗ được kích hoạt bằng cách cuộn thay vì một khối hydrate duy nhất.


Những gì bạn nhận được

Việc trích xuất hồ sơ trả lại đối tượng userInfo của TikTok. Hình dạng dưới đây chính xác là những gì đã được phát ra trong quá trình chạy; các số liệu là một ghi nhận thực tế và sẽ thay đổi theo thời gian:

json Copy
{
  "user": {
    "id": "...",
    "uniqueId": "oddanimalspecimens",
    "nickname": "Odd Animal Specimens",
    "avatarLarger": "https://...",
    "signature": "...",
    "verified": false,
    "secUid": "...",
    "privateAccount": false
  },
  "stats": {
    "followerCount": 4000000,
    "followingCount": 9,
    "heartCount": 78000000,
    "videoCount": 179,
    "diggCount": 0,
    "friendCount": 6
  }
}
// Hình dạng là đối tượng userInfo của TikTok nguyên văn; các trường chuỗi được hiển thị là "..." là một mẫu minh họa, các số liệu là ghi nhận thực tế và thay đổi theo thời gian.

Một vài quan sát chân thành:

  • Đối tượng user rất đa dạng — TikTok bao gồm hàng chục trường (cài đặt, secUid, các cờ quan hệ). Đọc một vài trường bạn cần; bỏ qua phần còn lại.
  • heartheartCount đều xuất hiện và mang tổng số giống nhau — hãy sử dụng heartCount.
  • Các số liệu được làm tròn ở quy mô lớn. Các tài khoản lớn báo cáo tổng số đã được làm tròn (ví dụ: 4,000,000) theo cách mà TikTok thể hiện trong giao diện người dùng.
  • Khu vực quan trọng cho việc hiển thị, không chỉ dữ liệu. Ghi lại proxyCountry và cung cấp đủ TTL cho phiên.

Kết luận: một mô hình trên mọi bề mặt TikTok

Việc thu thập dữ liệu từ TikTok đơn giản là hai bước đọc: phân tích #__UNIVERSAL_DATA_FOR_REHYDRATION__ để lấy những gì đã có trong trang và ghi lại các phản hồi XHR để lấy những gì được làm mới khi cuộn. Hồ sơ, bài viết, bình luận, tìm kiếm và kênh đều là các biến thể của vòng lặp vẽ sau đó trích xuất đơn. Chạy trên Scrapeless Scraping Browser là điều khiến việc vẽ diễn ra — Chromium chống phát hiện cộng với cổng ra dân cư, vì vậy TikTok cung cấp dữ liệu thực thay vì một shell trống rỗng. Đối với biến thể thương mại điện tử của cùng một mô hình SDK qua CDP, hãy xem hướng dẫn thu thập dữ liệu Etsy; trang sản phẩm Scraping Browsertài liệu bao quát toàn bộ bề mặt SDK. Ghi lại khu vực, mở rộng TTL cho các bề mặt nặng scroll, và đọc JSON mà TikTok đã cung cấp cho bạn.


Sẵn sàng xây dựng ống dẫn dữ liệu AI của bạn chưa?

Tham gia cộng đồng của chúng tôi để yêu cầu một gói miễn phí và kết nối với các nhà phát triển xây dựng ống dẫn dữ liệu xã hội: Discord · Telegram.
Đăng ký tại app.scrapeless.com để nhận thời gian chạy Scraping Browser miễn phí và điều chỉnh các mẫu ở trên cho các hồ sơ, truy vấn và kênh mà quy trình làm việc của bạn cần. Xem giá cả để biết quy mô.


CÂU HỎI THƯỜNG GẶP

Q: Việc thu thập dữ liệu từ TikTok có hợp pháp không?
Việc thu thập dữ liệu công khai nói chung là hợp pháp, nhưng quy định thay đổi tùy theo khu vực và Điều khoản Dịch vụ của TikTok áp dụng. Chỉ thu thập dữ liệu công khai, xem lại Điều khoản Dịch vụ và tham khảo ý kiến luật sư cho trường hợp sử dụng của bạn.

Q: Tại sao việc thu thập của tôi trả về một trang trống hoặc bị hết thời gian?
Hai nguyên nhân phổ biến: khu vực ra mà TikTok định tuyến bạn qua, và một phiên làm việc kết thúc trước khi quá trình tái hydrat hóa hoàn tất. Đặt proxyCountry (chuyển đổi nếu quá trình tạo hình bị treo) và tăng sessionTTL.

Q: Tôi có cần một proxy không?
Có. TikTok rất chú trọng đến uy tín IP; hãy đặt egress nhà riêng với proxyCountry để trang có thể tạo hình và các yêu cầu XHR được gửi đi.

Q: Làm thế nào tôi có thể lấy được các bài đăng vượt qua trang đầu tiên?
Cuộn trang để kích hoạt các yêu cầu XHR được tải lười và ghi lại chúng với một listener response, sau đó phân tích các thân JSON — blob tái hydrat hóa chỉ giữ lại lô đầu tiên.

Q: Đánh dấu DOM đã thay đổi và các bộ chọn của tôi bị hỏng. Giờ thì sao?
Dựa vào các nguồn JSON — blob tái hydrat hóa và các thân XHR — thay vì thu thập lưới đã tạo hình. Chúng thay đổi ít hơn so với đánh dấu hình ảnh. Kiểm tra lại các bộ chọn chỉ cho những cái bạn vẫn cần.

Q: Tôi có thể chạy bao nhiêu worker chống lại TikTok?
Giữ cho độ đồng thời khiêm tốn — một vài phiên cho mỗi máy chủ — để tín hiệu uy tín IP giữ cho sạch sẽ.

Q: Tôi có thể chạy điều này mà không có tác nhân AI không?
Có. Đó là SDK Scrapeless cộng với Puppeteer thông thường qua CDP — không cần tác nhân.

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