Share
Crawl dữ liệu (data) là gì? Đây là hoạt động thu thập dữ liệu từ một trang web bất kỳ, sau đó phân tích, đọc dữ liệu và lọc ra những thông tin được yêu cầu. Đây là hoạt động không mấy xa lạ với người làm marketing, kinh doanh. Tuy nhiên, bài viết này sẽ mang tới “bí kíp” mới là cách Crawl dữ liệu số lượng lớn mà không bị giới hạn từ trang mạng xã hội nổi tiếng Instagram.
Trong thời đại công nghệ 4.0 và dịch bệnh Covid, mạng xã hội phát triển nhanh chóng với vai trò như công cụ liên lạc và kết nối con người với xã hội. Thêm vào đó, mạng xã hội còn được sử dụng như một kênh kinh doanh chính, mang lại hàng tỷ lợi nhuận cho hàng triệu cá nhân và doanh nghiệp.
Đối với khách hàng, những đánh giá khách quan về sản phẩm/dịch vụ từ người dùng trước là yếu tố ảnh hưởng mạnh mẽ tới quyết định mua hàng của họ. Vậy nên đối với người kinh doanh, việc thu thập, tổng hợp và trưng bày tất cả những review tốt về sản phẩm là một hoạt động quan trọng.
Crawl data từ hàng triệu bài viết trên Instagram
Bài toán đặt ra là làm thế nào để có thể tổng hợp hàng triệu bài viết đánh giá của người dùng về bạn trong thời gian ngắn nhất và ít tốn công sức nhất?
Bài viết này sẽ giúp chúng ta giải quyết bài toán nêu trên. Trong phạm vi bài này, mình sẽ trình bày cách crawl data nội dung bài viết đối với mạng xã hội Instagram, cùng tiếp tục tìm hiểu nào!
Đây có thể là 2 phương pháp mà Marketer, chủ doanh nghiệp hoặc lập trình viên của bạn đang sử dụng.
Một bài viết trên Instagram thông thường sẽ có đường dẫn dạng như sau:
https://www.instagram.com/p/{post_id}/
VD: https://www.instagram.com/p/CVLYkRcpSoC/
Đối với phương pháp này, đơn giản ta chỉ cần thêm tham số ?__a=1 vào đằng sau link của bài viết, khi đó đường link sẽ có dạng sau:
https://www.instagram.com/p/{post_id}/?__a=1
VD: https://www.instagram.com/p/CVLYkRcpSoC/?__a=1
Khi gửi yêu cầu đến link trên, endpoint sẽ trả về dữ liệu kiểu json, trong đó bao gồm các thông tin như trong hình sau:
Hình 1: Crawl dữ liệu sử dụng endpoint ?__a=1
Trong dữ liệu trả về sẽ bao gồm các ảnh với các kích thước khác nhau, chúng ta có thể sử dụng kích thước phù hợp với mong muốn của mình.
Instagram cung cấp 1 Api giúp ta có thể lấy chi tiết nội dung của 1 bài viết sử dụng đường dẫn sau: https://api.instagram.com/oembed
Để crawl chi tiết nội dung một bài viết bất kỳ, ta truyền thêm url của bài viết đó làm tham số cho api, định dạng như sau: https://api.instagram.com/oembed?url=your_url
VD: Ta có bài viết có đường link như sau, https://www.instagram.com/p/fA9uwTtkSN/ muốn crawl nội dung của bài viết này, ta chỉ việc gọi đến api sau:
https://api.instagram.com/oembed?url=https://www.instagram.com/p/fA9uwTtkSN/
Hình 2: Crawl dữ liệu sử dụng tính năng embed
Dữ liệu trả về sau khi gọi đến Api trên sẽ bao gồm trường thumbnail_url, ta có thể hiển thị chúng ở bất kỳ đâu ta mong muốn.
Trên đây là 2 phương pháp giúp chúng ta có thể crawl ảnh của Instagram và nhúng tùy ý vào website của mình. Tuy nhiên, quay lại bài toán trước đó. Nếu phải crawl vài triệu bài viết một ngày thì 2 cách trên có giải quyết được vấn đề hay không? Hạn chế của các phương pháp trên là gì và có phương pháp nào hiệu quả hơn không? Cùng tìm hiểu ở phần tiếp theo.
Đối với cách thứ nhất sẽ có một số hạn chế sau đây:
Bắt buộc người dùng phải login vào Instagram mới có thể sử dụng được theo cách này.
Bị giới hạn số lần gọi api: đối với api này, hệ thống sẽ giới hạn chỉ cho gọi đến api tầm 2000 lần/ngày. Nếu gọi quá số lượng quy định, hệ thống sẽ trả về lỗi Rate limit và phải đợi sang ngày mới thì mới sử dụng api tiếp được
Api có thể được Instagram thay đổi bất kỳ lúc nào và dữ liệu được nhúng trên website sẽ bị ảnh hưởng.
Đối với phương pháp thứ hai, cũng sẽ có một số hạn chế nhất định:
Bị giới hạn số lần gọi api: cũng giống như cách thứ nhất, nếu sử dụng cách này chúng ta cũng không thể gọi quá số lượng mà nhà cung cấp instagram cung cấp.
Instagram hiện đã không còn hỗ trợ api này nên họ có thể bỏ api này bất kỳ lúc nào.
Như vậy, với những hạn chế vừa liệt kê bên trên, việc crawl hàng triệu bài viết mỗi ngày là điều không thể. Để giải quyết được bài toán đã nêu, chúng ta cùng nghiên cứu cách thứ 3 và cũng là nội dung chính tôi muốn trình bày trong bài này. Cách sử dụng tính năng Instagram Oembed để lấy siêu dữ liệu cơ bản và html nhúng của một bài viết.
Trước tiên, ta cần hiểu Instagram oEmbed là một tính năng do nhà phát triển Facebook cung cấp. Nhiệm vụ của nó là lấy siêu dữ liệu cơ bản và html nhúng của một bài viết trên Instagram. Nhờ vậy, chúng ta có thể hiển thị bài viết đó trong một trang web hoặc ứng dụng khác.
Một tài khoản nhà phát triển trên Facebook
Một ứng dụng Facebook ở chế độ chính thức
Một mã truy cập
Xét duyệt ứng dụng cho tính năng oEmbed
Về chi tiết cách xét duyệt ứng dụng cho tính năng oEmbed, ở hướng dẫn chính thức của Facebook đã nói rất cụ thể, mọi người có thể truy cập vào đường dẫn này để xem chi tiết
Có một lưu ý ở đây, mã truy cập sẽ bao gồm 2 loại mã là mã truy cập máy khách và mã truy cập ứng dụng. Mã truy cập máy khách sẽ bị giới hạn số lần gọi api trong khoảng vài nghìn lần, nhưng mã truy cập ứng dụng có thể tạo tối đa 5 triệu yêu cầu mỗi ngày. Để giải quyết crawl data hàng triệu bài viết mỗi ngày ta phải sử dụng mã truy cập ứng dụng, phần lấy mã truy cập ứng dụng cũng đã được bao gồm trong link phía trên.
Sau khi hoàn thành các bước theo link đã đính kèm thì việc crawl hàng triệu bài viết hàng ngày từ instagram thực ra lại trở nên cực kỳ đơn giản.
Như vậy qua bài viết này mình cũng đã trình bày cách crawl dữ liệu từ hàng triệu bài viết trên Instagram cực kỳ đơn giản và hiệu quả. Hy vọng giải pháp này đã giúp mọi người tiết kiệm thời gian và kinh doanh hiệu quả hơn. Hẹn mọi người ở các bài viết tiếp theo.
Rabiloo blog là kênh thông tin chia sẻ kiến thức và kinh nghiệm của nhóm lập trình viên trên 5 năm kinh nghiệm phát triển phần mềm. Nếu bạn quan tâm tới chủ đề công nghệ, chuyển đổi số, website, ứng dụng, trí tuệ nhân tạo, VR/AR,... hãy truy cập vào kênh tri thức của chúng tôi.
Share