Người ta trích xuất dữ liệu từ Facebook (ví dụ: đếm post có hashtag) như thế nào?

Mấy ngày nay trên Facebook thấy có quá chừng người đặt câu hỏi xoay quanh việc làm sao có thể đếm được hết số bài cũng như trích xuất được hết mọi post có gắn một hashtag nhất định. Thực ra việc này không quá khó, nhiều công ty về truyền thông ở Việt Nam đã làm nhiều năm nay để thu thập thông tin và đo mức độ ảnh hưởng cho các chương trình marketing / quảng cáo. Một số công ty khác thì bán giải pháp trích xuất thông tin từ Facebook với đa dạng các nội dung có thể lấy được.

Về cơ bản, để làm chuyện này có 2 cách:

Cách 1: sử dụng API do Facebook cung cấp. Đây là cách chính đạo, được Facebook hỗ trợ một cách chính thức và bạn có thể xem đầy đủ tại địa chỉ developers.facebook.com/docs/graph-api/. Với mỗi API (thực chất chỉ là một đường link, như trong ảnh bên dưới bạn thấy đoạn graph.facebook.com/v3.2/me?fields=... chính là API đấy), Facebook sẽ trả về data được yêu cầu, ví dụ như bên dưới là mẫu data lấy thông tin cá nhân của tài khoản mình. Dữ liệu được trả về theo định dạng JSON, và khi có chuỗi JSON này mình có thể lấy được tên, ngày tháng năm sinh, sở thích... (nếu bạn có cấp quyền cho app). Thông tin sau đó được lưu trữ vào một số cơ sở dữ liệu để dùng về sau mà không cần đi trích xuất lại.


Ngày xưa từ năm 2017 trở về trước thì việc lấy dữ liệu qua API rất dễ thở, lấy được rất nhiều thông tin và không chỉ lấy từ fanpage, group mà còn lấy được từ cả trang cá nhân và các post của bạn bè mà cá nhân đó có kết bạn. Điều đó khiến việc trích xuất dữ liệu trở nên cực kì dễ dàng.

Tuy nhiên, kể từ sau khi scandal Cambridge Analytics nổ ra, Facebook đã siết rất chặt việc trích dữ liệu từ API. Kể từ ngày 1/4/2018, Facebook siết chặt lại về quyền, về thông tin trả về khi sử dụng API cũng như cấm hẳn một số API, ví dụ như API sẽ chỉ thấy được post của chính người dùng đang đăng nhập, không thể thấy post của những bạn bè có comment lên post chẳng hạn.

Quay trở lại vụ hashtag, Facebook lúc trước có cung cấp việc truy xuất dữ liệu public có hashtag nào đó, tuy nhiên họ buộc bên muốn lấy dữ liệu phải là một nhà xuất bản, một trang tin tức nào đó thì mới cho lấy. Chưa rõ bây giờ API hashtag có còn chạy không, nhưng mình biết một số công ty ở Việt Nam có tài khoản dạng publisher này và họ có thể dễ dàng track được các thông tin được hashtag.

Cách 2: sử dụng phương thức crawling hoặc scrapping. Kĩ thuật này sẽ dùng các con "bot" hoặc còn được gọi là "crawler" đi đọc mã nguồn trang web rồ trích thông tin từ các thẻ HTML. Nói đâu xa, Google là công ty dùng crawling mạnh nhất, họ crawl và lưu trữ thông tin của cả thế giới còn được cơ mà. Thì giờ chúng ta dùng kĩ thuật tương tự để lấy dữ liệu trên Facebook mà thôi. Cái gì mà hiện ra web được thì sẽ scrap được hết.

Từng thẻ HTML có các id và tag nhất định, con crawler sẽ sử dụng các tag này để xác định đúng vị trí cần lấy dữ liệu. Ví dụ bên dưới là đoạn HTML của trang public với hashtag #ngayhoihoahuongduong2018, mình có thể nhanh chóng xác định được những tấm ảnh được đăng tải, tìm tên tác giả, link tới Facebook của tác giả và cả nội dung câu chữ caption.


Cũng trong trang này có nút See more, tức là tải thêm những nội dung public khác. Nếu mình đủ siêng ngồi bấm nút See more này vài trăm (hoặc vài nghìn lần), mình có thể xem được hết mọi post có hashtag #ngayhoihoahuongduong2018. Tất nhiên khi viết thành script tự động thì máy sẽ giả lập thao tác click này cho mình nên tốc độ rất nhanh. Cứ click, trích xuất dữ liệu, lưu xuống database, rồi sau đó lại tiếp tục làm như vậy cho đến khi không còn nút See more nữa là kết thúc. Lúc này chỉ việc đếm các kết quả đã lưu là ra được tổng số post có hashtag, đơn giản như đang giỡn.

Việc viết một con crawler không phải chuyện khó, gần như mọi lập trình viên đều có thể làm được. Tất nhiên để crawl số lượng lớn và crawl nhiều trang khác nhau thì sẽ cần mọi số kĩ thuật và thiết kế đặc biệt nhưng nguyên lý cơ bản là không khác nhau. Cứ lấy HTML moi ra thông tin cần thiết là được. Kể cả web bắt login mới cho xài thì crawler cũng xử được luôn.

Bản thân Tinh tế cũng đang dùng một tool lấy dữ liệu, tool này do các em gái dễ thương của team Data viết ra chứ không đi mua tool. Script này trích xuất dữ liệu từ Facebook để quay random cho các game chơi trên fanpage hoặc group Tinh tế. Chỉ có cách này bọn mình mới lấy được hết comment của anh em trong những post tặng quà vốn có thể lên tới vài nghìn comment. Tất nhiên bọn mình không cần lưu lại các thông tin cá nhân của anh em làm gì cả, chỉ lấy dữ liệu comment nhằm kiểm tra xem hợp lệ hay không (nếu game có yêu cầu comment số ngẫu nhiên) và lấy link tới comment để thông báo trúng giải cho anh em sau khi quay random xong mà thôi.


Một đoạn trong script lấy dữ liệu comment trên fanpage / group  lấy được link tới comment, thời gian comment, nội dung, loại comment...​

Ở quy mô nhỏ thì có thể dùng được cách crawl trực tiếp từ các link cụ thể kiểu hashtag, nhưng ở quy mô lớn hơn thì các công ty lắng nghe mạng xã hội sẽ không dùng như vậy vì không đủ data, thay vào đó họ crawl hết sạch sẽ toàn bộ post Facebook để ở trạng thái public và một số posst ở chế độ Friend only của toàn Việt Nam (hoặc thêm vài nước nữa, tùy mục tiêu cần đạt được là gì). Cái này cần sức mạnh khủng khiếp, mình chưa làm nổi nhưng đã từng được thấy một công ty làm (khá nhạy cảm nên không nêu tên).

Họ có thể quét được vài chục triệu hay thậm chí vài trăm triệu post một ngày của một tập rất lớn người dùng ở Việt Nam, nhờ vậy họ mới biết được ý kiến phản hồi của khách hàng về một chiến dịch này đó, thái độ của người dùng Facebooi với một vấn đề xã hội mới diễn ra... Cách trích xuất thông tin vẫn là crawl và lấy tag HTML, có điều nó chạy ở quy mô lớn hơn là post News Feed và có nhiêu lấy nhiêu, sau đó chỉ việc scan các post có hashtag mong muốn là xong.

Về việc crawl sạch sẽ data cá nhân và các bài post (dù là có hashtag hay không) mình đã chia sẻ khá nhiều trong bài: Dữ liệu của bạn trên Facebook đang bị khai thác triệt để và bạn không có cách nào chạy trốn. Mời anh em xem để có cái nhìn cụ thể hơn. 

Nói một cách khái quát hơn, bất kì thứ gì có thể truy cập được bằng web thì đều có thể crawl được. Các trang web so sánh giá, web tìm kiếm, các trang tổng hợp thông tin... cũng dùng cách này. Có điều việc tôn trọng quyền riêng tư phải phụ thuộc vào ý thức và đạo đức cũng như mục đích của lập trình viên. Ví dụ, bọn mình chỉ trích dữ liệu từ Group và Fanpage Tinh tế mà thôi, đây là hai "tài sản" của bọn mình rồi, và cũng không lưu lại thông tin cá nhân của anh em. Nhưng những công ty khác thì có thể, họ có thể lấy dữ liệu của bạn mà bạn không hề hay biết. Và rất nhiều công ty khảo sát thị trường, theo dõi trend... đang lưu dữ liệu của anh em mà (có thể) không được sự cho phép. Có điều để biết được chuyện này là cực kì khó.