Chuyển đến nội dung chính

Telegram::GroupScraper - Công cụ cào dữ liệu kênh và nhóm công khai Telegram

Telegram

Tổng quan về công cụ cào dữ liệu

Công cụ cào dữ liệu thu thập tất cả các bài đăng và tin nhắn từ các kênh và nhóm công khai Telegram.

Logic hoạt động khác với các công cụ cào dữ liệu khác: nó tự động duyệt qua các tin nhắn trong kênh hoặc nhóm. Do đó, không thể sử dụng nó cùng với các công cụ cào dữ liệu khác trong cùng một tác vụ.

Thứ tự các dòng trong kết quả không được đảm bảo theo số thứ tự bài đăng (phụ thuộc vào luồng). Siêu dữ liệu của trò chuyện/kênh được tải một lần cho mỗi kênh và được lặp lại trong mỗi dòng bài đăng.

Việc lưu kết quả có thể thực hiện theo hình thức và cấu trúc mà bạn cần, nhờ vào bộ tạo mẫu mạnh mẽ tích hợp sẵn Template Toolkit cho phép áp dụng thêm logic vào kết quả và xuất dữ liệu ở nhiều định dạng khác nhau, bao gồm JSON, SQL và CSV.

Các trường hợp ứng dụng công cụ cào dữ liệu

Dữ liệu thu thập được

Hoạt động với các kênh và nhóm công khai.

Tin nhắn

  • Liên kết đến bài đăng (url)
  • ID bài đăng (post_id)
  • Username của kênh/nhóm không có @ (channel)
  • Văn bản bài đăng kèm HTML (message_text)
  • Văn bản tương tự không có HTML (message_text_plain) — dùng cho bộ lọc, tìm kiếm và xuất kết quả
  • Ngày theo định dạng ISO (message_date)
  • Lượt xem (views) — hiển thị như trong Telegram: 15.5K, 1.2M, v.v.; chỉ dành cho kênh, đối với nhóm — để trống
  • Thông báo về video (message_video_notice) — nếu bài đăng có video nhưng trong mảng message_videos không có URL, và trường này được điền: video chỉ có thể xem trên Telegram bằng tài khoản cá nhân (yêu cầu đăng nhập), không có liên kết trực tiếp đến tệp. Đây không phải lỗi cào dữ liệu — Telegram không cung cấp các video như vậy nếu không đăng nhập vào tài khoản.

Tác giả bài đăng

  • Liên kết đến hồ sơ (user_link)
  • Tên (user_name)
  • URL ảnh đại diện (user_avatar)

Chuyển tiếp

  • Nguồn chuyển tiếp (forward_from)
  • Liên kết đến nguồn (forward_from_url) — URL gốc nếu có sẵn
  • Giải thích khi thiếu liên kết (forward_from_notice) — được điền nếu forward_from_url trống (ví dụ: "Source link not available in embed"): không có liên kết trực tiếp, bản gốc có thể đã bị xóa, ẩn hoặc không khả dụng vì lý do khác. Không phải lỗi của công cụ cào dữ liệu.

Phản hồi (reply)

  • URL của tin nhắn được phản hồi (reply_to_url)
  • ID bài đăng từ URL (reply_to_post_id)
  • Tác giả của tin nhắn gốc (reply_to_author)
  • Văn bản của tin nhắn gốc, dạng plain text (reply_to_text)

Cảm xúc (reactions)

  • Tổng số tất cả các cảm xúc (reactions_total) — số dạng chuỗi; K/M/B được quy đổi

Siêu dữ liệu của chat/kênh

Được tải một lần cho mỗi kênh, lặp lại trong mỗi dòng của bài đăng.

  • Tên (chat_title)
  • Số lượng người đăng ký/thành viên (chat_members)
  • Trực tuyến (chat_online) — chỉ dành cho nhóm; số lượng người dùng trực tuyến tại thời điểm bắt đầu thu thập theo kênh, không được cập nhật trong quá trình cào dữ liệu. Đối với kênh — để trống
  • Mô tả, plain text (chat_description)
  • Bộ đếm phương tiện và liên kết (chat_photos, chat_videos, chat_files, chat_links) — chỉ dành cho kênh

Mảng

reactions — các trường emoji, count (như trong Telegram: 16, 1.2K). Ai đã đặt cảm xúc — không được thu thập: chỉ có loại emoji và tổng số lượng.

message_photos — trường url; album — gồm nhiều dòng.

message_videos — trường url. Nếu không có URL nhưng trong bài đăng có video — hãy xem message_video_notice (chỉ xem được sau khi đăng nhập Telegram).

links — trường url; các liên kết ngoài từ văn bản bài đăng. Các liên kết dạng t.me/username không có đường dẫn (path) sẽ không được đưa vào đây (đó là mentions).

mentions — trường username (@username); từ các liên kết t.me/username và văn bản @username trong thẻ <a>.

Tính năng

  • Chuẩn hóa truy vấn linh hoạt (xem Truy vấn)
  • Bộ lọc theo ngày (dateFrom, dateTo) và tin nhắn chuyển tiếp (skipForwards)
  • Album ảnh và video — nhiều URL trong một bài đăng

Các phương án sử dụng

  • Thu thập nội dung các bài đăng của kênh hoặc nhóm
  • Theo dõi cảm xúc, lượt xem và lượt chuyển tiếp

Truy vấn

Hỗ trợ các kênh và nhóm công khai. Tất cả các định dạng được đưa về https://t.me/{username}:

Truy vấnHành vi
@usernamekênh hoặc nhóm, bắt đầu từ Start message number
usernametương tự
https://t.me/usernametương tự
t.me/usernametương tự
https://t.me/s/usernametương tự
https://t.me/username/123kênh hoặc nhóm, bắt đầu từ bài đăng #123 (Start message number bị bỏ qua)

Truy vấn không hợp lệ → ghi dòng Unknown query vào log, kết quả trống.

Ví dụ:

https://t.me/a_parser
@a_parser
https://t.me/a_parser/100

Các ví dụ xuất kết quả

A-Parser hỗ trợ định dạng kết quả linh hoạt nhờ bộ tạo mẫu tích hợp Template Toolkit, cho phép xuất kết quả ở dạng tùy ý cũng như dạng có cấu trúc như CSV hoặc JSON

Xuất mặc định

Định dạng kết quả:

$channel/$post_id: $message_text_plain ($views views, $reactions_total reactions)

Ví dụ kết quả:

a_parser/1234: đây là các bộ lọc) ( views, 0 reactions)
a_parser/85962: Google đã tung ra thứ gì đó mới về bảo mật) ( views, 2 reactions)

Xuất ra bảng CSV

Định dạng kết quả:

[% tools.CSVline(channel, post_id, message_text_plain, views, reactions_total) %]

Ví dụ kết quả:

a_parser,1234,"đây là các bộ lọc)",,0
a_parser,85962,"Google đã tung ra thứ gì đó mới về bảo mật)",,2

Lọc và bỏ qua bài đăng

Dòng không được đưa vào kết quả nếu:

  1. Ngày nằm ngoài phạm vi Date from / Date to
  2. Bật Skip forwards và bài đăng là tin nhắn chuyển tiếp

Khi lọc theo ngày hoặc chuyển tiếp, bài đăng vẫn được coi là đã tìm thấy, quá trình duyệt kênh vẫn tiếp tục.

Quá trình duyệt kênh dừng lại khi:

  • sau bài đăng cuối cùng tìm thấy, đã kiểm tra liên tiếp số lượng ID bằng Max empty posts mà không có phát hiện mới;
  • hoặc một chuỗi các bài đăng trống ngay từ đầu (nếu chưa tìm thấy bài đăng nào).

Xử lý kết quả

A-Parser cho phép xử lý kết quả trực tiếp trong quá trình cào dữ liệu, trong phần này chúng tôi đưa ra các trường hợp phổ biến nhất cho công cụ cào dữ liệu Telegram

Lọc kết quả theo sự xuất hiện của từ trong tin nhắn

Ví dụ

Cần thêm một bộ lọc và chọn trong danh sách thả xuống $message_text - Message text. Chọn loại RegEx match. Trong trường dành cho regex, hãy nhập regex với các từ cần thiết:

\bcông cụ cào dữ liệu\b|\bGoogle\b|\byandex\b|\bcông cụ cào dữ liệu\b|\bProxy\b|\bDork\b

\b - ranh giới từ

| - HOẶC

is - cờ regex

Tải xuống ví dụ

Cách nhập ví dụ vào A-Parser

eJyVVN1v2jAQ/18sHjaJ8qFSacobRaLaxEpX6BOg6oovqVfH9myHgTL+952dkMC6
PewhVu53v/v2uWQe3Jt7sOjQO5asSmbiP0uYR4mZhfyK6+0V7iE3ElmXGbAObeCu
2LKmJMmd1YVZbC0YtETimEIhPeuWzB8MkrdUSB9V5D5oEpajc5Dhs8c9EWvCsmJb
zMFvXwnegSwCsl6/rIvB6DqN5yCco+ocRuSmRtYvv+i70zqTWAsHUBz3tfAfToIw
TFvSNcYTzgw+nVNHLak2gIZElWjjhVZUinDsuNmcOuGm2lKxhHfMsFd3v1EuYIdL
XfUPW3hK0j3koTEdDh6DtpdGRx8+9nxsKHAuQkSQVYQwsjbqkxI/YmOVJi79WoFu
anUeJx8dBPBwym7FOlFm5KKItt8qG5akIB12maNUp0CJ8D81ggYLXtt57ADhJdNq
LOUMdyhbWvR/WwjJ6X6NUzL6XBv+nTJ/5+PYlHceaof2p6UcGi9Rup1/ba24numM
KudhUFLkwpPsJrpQYTADAt8QTdOz+9CzXFtswnhbYBOc1smg4kRsJzY2LXRRxcVU
LsGtVqnI5pS/FRxPzEItaWfnaqLDRoayVCElTcXhY3s7xq6eQhCayt8ZT2KIUPlp
Y5nXWroviypVYwXdvpuQYE6NPI9au9yClE+Ps3MNa28UCa/eG5f0+76XYx+eq/eD
BUOPmaYbRWUdN83D0rxF5b+el6Q80si+u4fKIBQY6IRRp1zcseHxN9yRrow=

Các cài đặt có thể có

Tham sốGiá trị mặc địnhMô tả
Max empty posts1000Số lượng ID trống liên tiếp cần thử sau bài đăng cuối cùng tìm thấy, sau đó dừng quét kênh. Không phải là giới hạn số bài đăng đã lưu
Start message number1Số thứ tự bài đăng để bắt đầu quét (nếu trong truy vấn không có /123)
Skip forwardsKhông lưu các tin nhắn được chuyển tiếp
Date fromNgày từ, bao gồm cả ngày đó. Định dạng YYYY-MM-DD
Date toNgày đến, không bao gồm ngày đó. Định dạng YYYY-MM-DD