Cách thu thập bài đăng và số liệu video trên TikTok bằng Python
Senior Web Scraping Engineer
TL;DR:
- Một trình thu thập video TikTok bắt đầu với một tài khoản công khai đã biết. Giải quyết tên người dùng với
scraper.tiktok.user.detail, sau đó chuyểnsec_uidcủa nó đếnscraper.tiktok.user.work. - Phản hồi bài viết là một mẫu hạn chế. Yêu cầu đã được tài liệu chấp nhận
cursorvàcount, nhưng một phản hồi không nên được mô tả như là lịch sử bài viết hoàn chỉnh của một người sáng tạo. - Các số liệu bài viết công khai cần có ngữ cảnh. Lưu thời gian thu thập bên cạnh số lượng lượt xem, thích, bình luận, chia sẻ, thu thập và đăng lại vì những giá trị đó có thể thay đổi.
- Các bài viết ảnh và các trường tùy chọn cần phân tích khoan dung. Một mục hợp lệ có thể có các trường phương tiện hoặc phụ đề trống, và loại bài viết nên đến từ bản ghi được trả về thay vì giả định.
- Xuất ổn định giữ các định danh dưới dạng chuỗi. Bảo toàn JSON thô và viết một CSV chuẩn hóa cho phân tích.
- 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 một tài khoản trong Bảng điều khiển Scrapeless.
Giới thiệu: danh sách bài viết là một mẫu có dấu thời gian
Nguồn cấp công khai của một người sáng tạo pha trộn các định danh, chú thích, siêu dữ liệu phương tiện, hashtag, âm nhạc và số lượng tương tác tích lũy. Biến nguồn cấp này thành một bảng hữu ích yêu cầu hai lần gọi API và một lượng nhỏ chuẩn hóa cẩn thận.
Hướng dẫn này xây dựng một trình thu thập video TikTok cho một tài khoản đã biết. Nó giải quyết sec_uid của tài khoản, yêu cầu một tập hợp hạn chế các bài viết công khai và viết một hàng CSV cho mỗi mục. Quy trình làm việc không nhãn hóa phản hồi đầu tiên như là một kho lưu trữ hoàn chỉnh, và nó không coi số lượt xem công khai như là phạm vi tiếp cận độc nhất.
Để có bản đồ về các diễn viên hồ sơ, bài viết và Shop có sẵn, hãy đọc hướng dẫn TikTok Scraper API.
Những Gì Bạn Có Thể Thu Thập Từ Một Tài Khoản Đã Biết
Diễn viên scraper.tiktok.user.work trả về một mảng items cho sec_uid được cung cấp. Một mục bài viết có thể chứa ID và URL của nó, mô tả, văn bản nhãn dán, thời gian tạo, số lượng tương tác công khai, chi tiết phương tiện, hashtag, ngôn ngữ, cờ đã ghim và quảng cáo, âm nhạc, phụ đề, quyền, và ngữ cảnh hồ sơ.
Hình dạng đó hỗ trợ một số đầu ra thực tiễn:
- Một danh sách bài viết cho một tài khoản công khai đã chọn
- Một bảng mô tả, hashtag, ngày tháng và URL bài viết
- Một cái nhìn tổng quan về tương tác tại một thời điểm
- Một hàng đợi xem xét cho các bài viết đã ghim, quảng bá hoặc liên quan đến thương mại điện tử
- Một bảng đầu vào sạch cho phân loại nội dung sau này
Diễn viên không tài liệu văn bản bình luận, nhân khẩu học khán giả, danh sách người theo dõi, người xem độc nhất, chuyển đổi, hoặc phân bổ doanh thu. Những trường này không nên xuất hiện trong đầu ra chuẩn hóa như là các thay thế suy luận.
Tại Sao Sử Dụng TikTok Scraper API
Một diễn viên được quản lý trả về JSON có cấu trúc từ một yêu cầu HTTP ổn định. Người gọi làm việc với các trường có tên thay vì duy trì các bộ chọn cho một trang đã được hiển thị, xử lý các bố cục cụ thể về phương tiện, hoặc dịch mọi thay đổi hình ảnh thành các cập nhật phân tích.
Yêu cầu vẫn cần có một phạm vi rõ ràng. Một trình thu thập bài viết TikTok nên bắt đầu với một tài khoản được người dùng chọn, ghi lại khi mẫu được thu thập, và giữ đủ ngữ cảnh nguồn để kiểm toán mỗi hàng. Giao dịch HTTP tuân theo các ngữ nghĩa được xác định bởi RFC 9110, trong khi tài liệu JSON của Python mô tả việc tuần tự hóa được sử dụng bên dưới.
Các yêu cầu cần có
- 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 chuẩn của nó
- Tên người dùng công khai của tài khoản để kiểm tra
- Một mục đích cho phép, một kích thước mẫu đã xác định và một chính sách giữ lại
- Một mã thông báo API hoạt động cho các khối mã bên dưới; xuất nó dưới dạng
SCRAPELESS_API_KEY
Các ví dụ được đánh dấu là một khoảng cách điều kiện tiên quyết vì không có mã thông báo API nào được nhúng trong bài viết này. Chúng là các đường dẫn yêu cầu đầy đủ, nhưng người đọc phải cung cấp thông tin xác thực và tên người dùng mục tiêu của riêng họ.
Cách Hoạt Động Của Trình Thu Thập Bài Viết TikTok
Quy trình làm việc sử dụng một điểm cuối và hai diễn viên:
POST https://api.scrapeless.com/api/v1/scraper/request
- Gửi
unique_idđếnscraper.tiktok.user.detail. - Đọc
sec_uidtừ phản hồi hồ sơ. - Gửi giá trị đó đến
scraper.tiktok.user.workvới mộtcountcó hạn. - Chuẩn hóa
itemsđược trả về mà không phát minh ra các trường thiếu.
Tài liệu phát triển chính thức của TikTok cũng phân tách việc liệt kê video được ủy quyền bởi tài khoản thành một hoạt động video-list chuyên dụng, điều này là một lời nhắc hữu ích rằng việc giải quyết danh tính và thu thập nội dung là các bước khác nhau. Xem Tài liệu Danh sách Video của TikTok cho giao diện từ bên thứ nhất đó.
Các tham số yêu cầu
Hồ sơ diễn viên yêu cầu unique_id, được viết mà không có @ dẫn đầu. Phản hồi của nó có thể bao gồm account_id, unique_id và sec_uid cùng với các trường hồ sơ công khai và thống kê.
Diễn viên bài viết yêu cầu sec_uid. Nó cũng chấp nhận cursor dưới dạng chuỗi và count dưới dạng số nguyên dương. Các giá trị mặc định đã được ghi lại là "0" và 35. Tài liệu xác nhận đầu vào con trỏ, nhưng phản hồi hiển thị không thiết lập một trường tiếp tục toàn cầu hoặc một đảm bảo lịch sử hoàn chỉnh.
Ghi nhanh với curl
Yêu cầu đầu tiên này giải quyết định danh tài khoản cần thiết bởi diễn viên bài viết.
Lưu ý: Mã dưới đây yêu cầu một mã thông báo Scrapeless API trực tiếp trong
SCRAPELESS_API_KEYvà một tên người dùng công khai được chọn bởi người đọc.
bash
curl --request POST 'https://api.scrapeless.com/api/v1/scraper/request' \
--header "x-api-token: ${SCRAPELESS_API_KEY}" \
--header 'content-type: application/json' \
--data '{
"actor": "scraper.tiktok.user.detail",
"input": {"unique_id": "tiktok"}
}'
Sao chép sec_uid đã trả về vào một yêu cầu scraper.tiktok.user.work, hoặc để chương trình Python thực hiện cả hai cuộc gọi.
Bao bì Phản hồi
Phản hồi bài viết chứa một mảng items. Đối xử với mỗi phần tử như một hồ sơ bài viết công khai đã quan sát. Các nhóm sau đây hữu ích khi xây dựng một bảng:
| Nhóm | Các trường ví dụ | Quy tắc chuẩn hóa |
|---|---|---|
| Danh tính | ID bài viết, URL bài viết | Lưu trữ ID dưới dạng chuỗi và giữ URL nguồn |
| Nội dung | mô tả, văn bản nhãn dán, hashtag, ngôn ngữ | Bảo tồn văn bản trống và danh sách trống |
| Thời gian | ngày tạo | Giữ giá trị nguồn và thêm một thời gian thu thập riêng biệt |
| Tương tác | chơi, thích, bình luận, chia sẻ, thu thập, số lần đăng lại | Ghi lại như một ảnh chụp, không phải phạm vi duy nhất |
| Định dạng | phương tiện, chi tiết ảnh hoặc video, phụ đề | Cho phép khoảng trống và kiểm tra phần tử đã trả về |
| Cờ | ghim, quảng cáo, video thương mại điện tử | Bảo tồn boolean mà không gán ý định |
Bắt đầu thu thập với Scrapeless
Tăng cường quy trình thu thập dữ liệu và tự động hóa của bạn với Scrapeless!
Đăng ký hôm nay và nhận $5 tín dụng miễn phí — không cần thẻ tín dụng.Nhận tín dụng miễn phí của bạn ngay bây giờ trong Bảng điều khiển Scrapeless.
Tích hợp API trong Python
Chương trình dưới đây giải quyết hồ sơ, thu thập lên đến 20 mục từ con trỏ được tài liệu hóa ban đầu, lưu trữ phản hồi thô và xuất một bảng thống kê gọn gàng. Tài liệu module CSV của Python giải thích trình ghi được sử dụng cho tệp đã chuẩn hóa.
Lưu ý: Mã dưới đây yêu cầu một mã thông báo Scrapeless API trực tiếp trong
SCRAPELESS_API_KEY; phần yêu cầu không thể thực hiện nếu không có thông tin xác thực bên ngoài đó.
python
import csv
import json
import os
from datetime import datetime, timezone
from urllib.request import Request, urlopen
ENDPOINT = "https://api.scrapeless.com/api/v1/scraper/request"
TOKEN = os.environ["SCRAPELESS_API_KEY"]
USERNAME = os.environ.get("TIKTOK_USERNAME", "tiktok").lstrip("@")
def run_actor(actor, actor_input):
payload = json.dumps({"actor": actor, "input": actor_input}).encode()
request = Request(
ENDPOINT,
data=payload,
headers={
"x-api-token": TOKEN,
"content-type": "application/json",
},
method="POST",
)
with urlopen(request, timeout=60) as response:
return json.load(response)
profile = run_actor(
"scraper.tiktok.user.detail",
{"unique_id": USERNAME},
)
posts = run_actor(
"scraper.tiktok.user.work",
{"sec_uid": profile["sec_uid"], "cursor": "0", "count": 20},
)
collected_at = datetime.now(timezone.utc).isoformat()
items = posts.get("items") or []
with open("tiktok-posts-raw.json", "w", encoding="utf-8") as raw_file:
json.dump(posts, raw_file, ensure_ascii=False, indent=2)
fieldnames = [
"collected_at",
"account_unique_id",
"post_id",
"post_url",
"description",
"created_at",
"play_count",
"like_count",
"comment_count",
"share_count",
"collect_count",
"repost_count",
"is_pinned",
"hashtags",
]
with open("tiktok-post-metrics.csv", "w", newline="", encoding="utf-8") as csv_file:
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writeheader()
for item in items:
writer.writerow({
"collected_at": collected_at,
"account_unique_id": profile.get("unique_id", USERNAME),
"post_id": str(item.get("id") or item.get("post_id") or ""),
"post_url": item.get("url") or item.get("post_url") or "",
"description": item.get("description") or "",
"created_at": item.get("create_time") or item.get("date") or "",
"play_count": item.get("play_count"),
"like_count": item.get("like_count"),
"comment_count": item.get("comment_count"),
"share_count": item.get("share_count"),
"collect_count": item.get("collect_count"),
"repost_count": item.get("repost_count"),
"is_pinned": item.get("is_pinned"),
"hashtags": "|".join(
str(tag.get("name", tag)) if isinstance(tag, dict) else str(tag)
for tag in (item.get("hashtags") or [])
),
})
print(f"Saved {len(items)} sampled post records for @{USERNAME}")
Các tên trường dự phòng trong bộ chuẩn hóa ngăn chặn một khóa tùy chọn gây lỗi xuất. So sánh chúng với phản hồi diễn viên hiện tại trước khi sửa đổi một sơ đồ sản xuất, và giữ JSON thô để có thể điều chỉnh lại quá trình biến đổi sau này.
Giải thích bài viết hình ảnh, cờ ghim và trường trống
Một URL video trống không chứng minh rằng việc thu thập đã thất bại. TikTok hỗ trợ các định dạng nội dung vượt ra ngoài một đối tượng video thông thường, và các trường phương tiện, âm nhạc hoặc phụ đề tùy chọn có thể trống trong một phản hồi hợp lệ. Căn cứ nhãn định dạng trên cấu trúc đã trả về và giữ trạng thái unknown khi bằng chứng chưa đầy đủ.
Một cờ ghim mô tả vị trí trên hồ sơ vào thời gian thu thập. Nó không xác lập khi người sáng tạo ghim bài viết, lý do nó được ghim, hoặc liệu nó vẫn ở trạng thái ghim sau khi chụp ảnh.
Cũng áp dụng cùng một kỷ luật cho các chỉ số công khai. Số lần chơi là một bộ đếm tích lũy của nền tảng được công khai cùng với bài viết; nó không phải là số người duy nhất. Thích, bình luận, chia sẻ, thu thập và đăng lại mô tả sự tương tác hiển thị, không phải chỉ định chiến dịch.
Xử lý cờ và mẫu cẩn thận
Yêu cầu tài liệu chấp nhận cursor, nhưng ví dụ phản hồi có sẵn không xác nhận một quy tắc phân trang duy nhất có thể được sao chép vào mọi khách hàng. Sử dụng phản hồi đầu tiên như một mẫu giới hạn trừ khi phản hồi trực tiếp và tài liệu hiện tại cung cấp một giá trị tiếp tục đã được xác thực.
Ghi lại con trỏ yêu cầu, số lượng yêu cầu, số lượng mục đã trả về và thời gian thu thập cạnh bên đầu ra. Bốn trường này làm cho phạm vi hiển thị. Chúng cũng ngăn một bảng điều khiển biến “20 bài viết đã quan sát” thành “tất cả bài viết” thông qua một tổng không được gán nhãn.
Những vấn đề phổ biến cần tránh
- Chuyển
unique_idcho diễn viên bài viết. Giải quyết hồ sơ trước và sử dụngsec_uidcủa nó. - Chuyển đổi ID dài thành số. Giữ các định danh tài khoản và bài viết dưới dạng chuỗi.
- Xem xét thiếu như không. Một số liệu hoặc trường phương tiện tùy chọn trống nên vẫn không xác định cho đến khi ý nghĩa của nó được xác lập.
- Gọi phản hồi đầu tiên là lịch sử hoàn chỉnh. Gán nó như một mẫu với con trỏ của nó, số lượng yêu cầu và thời gian thu thập.
- Bỏ qua URL nguồn. URL bài viết cung cấp cho người đánh giá một lộ trình trực tiếp trở lại mục công khai đã quan sát.
- Pha trộn các số liệu tích lũy với sự tăng trưởng theo khoảng thời gian. Một bức chân dung đơn lẻ cung cấp các mức; cần có những bức chân dung thời gian liên tiếp để có các thay đổi.
Scrapeless đóng gói diễn viên dưới Scraping API. Xem qua trang giá hiện tại trước khi thiết lập lịch thu thập sản xuất.
Kết luận: bảo tồn mẫu trước khi phân tích nó
Một công cụ thu thập video TikTok đáng tin cậy giải quyết một tài khoản đã biết, yêu cầu một mẫu bài đăng có giới hạn, và bảo tồn phản hồi trước khi làm phẳng nó. Đầu ra hữu ích không chỉ là một tệp CSV số liệu: nó bao gồm các định danh chuỗi ổn định, URL nguồn, một dấu thời gian thu thập, JSON thô, và một tuyên bố trung thực về phạm vi.
Sẵn sàng thu thập số liệu bài đăng công khai trên TikTok?
Tham gia Scrapeless Discord hoặc cộng đồng Telegram để so sánh ghi chú triển khai. Tạo tài khoản trong Scrapeless Dashboard khi bạn sẵn sàng thử nghiệm quy trình làm việc.
FAQ
Q: Công cụ thu thập video TikTok là gì?
Công cụ thu thập video TikTok thu thập các trường bài đăng công khai được hỗ trợ và trả lại chúng dưới dạng có cấu trúc. Quy trình làm việc trong hướng dẫn này sử dụng một diễn viên hồ sơ để giải quyết sec_uid và một diễn viên bài đăng để trả lại một mẫu items.
Q: Có thể công cụ thu thập bài đăng TikTok lấy mọi bài đăng từ một tài khoản không?
Phản hồi của một diễn viên không nên được mô tả là mọi bài đăng. Tài liệu yêu cầu cursor và count, nhưng khả năng bao phủ hoàn chỉnh phụ thuộc vào quy tắc tiếp tục đã được xác minh, nội dung công khai có thể truy cập của tài khoản, và việc thu thập thành công trong phạm vi dự kiến.
Q: Những số liệu video TikTok nào có sẵn?
Các mục bài đăng có thể bao gồm số lượt phát, thích, bình luận, chia sẻ, thu thập, và repost công khai. Đây là những bộ đếm tại thời điểm và không đại diện cho phạm vi độc nhất, doanh số, hoặc phân bổ chiến dịch.
Q: Các bài đăng ảnh nên được xử lý như thế nào?
Các bài đăng ảnh nên được phân tích từ các trường có sẵn trong mục trả về. Giữ các trường phương tiện có thể null và tránh tuyên bố một lần thu thập không thành công chỉ vì một trường video thông thường trống.
Q: Quy trình làm việc có cần proxy hoặc trình phân tích trình duyệt không?
Diễn viên quản lý xử lý bề mặt thu thập của nó phía sau yêu cầu API. Người gọi cung cấp các định danh hợp lệ, giới hạn mẫu, xác minh phản hồi, và lưu trữ kết quả một cách có trách nhiệm.
Q: Việc thu thập bài đăng công khai trên TikTok có hợp pháp không?
Tính hợp pháp phụ thuộc vào khu vực, mục đích, dữ liệu, phương thức 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 cho một mục đích được phép, giảm thiểu thời gian lưu trữ, và tìm kiếm tư vấn pháp lý cho dự án 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.



