Cách tải xuống dữ liệu Instagram bằng Python

Instagram là một trong những mạng truyền thông xã hội lớn nhất thế giới, với khoảng 1,21 tỷ người dùng tính đến năm 2021, tương đương khoảng 28% internet, theo Statista.
Bài viết này là hướng dẫn về cách tải xuống dữ liệu Instagram từ hồ sơ theo chương trình bằng Python theo hai phương pháp. Phương pháp đầu tiên là tải xuống phương tiện bằng Instaloader. Thứ hai là viết một tập lệnh Python đơn giản để lấy dữ liệu JSON về hồ sơ.
Điều quan trọng cần lưu ý là việc thu thập dữ liệu có thể vi phạm điều khoản dịch vụ của Instagram và chúng tôi khuyên bạn chỉ nên tải xuống dữ liệu từ tài khoản của mình.
Sử dụng Trình tải xuống
Instaloader là gói Python để tải xuống phương tiện Instagram. Nó cực kỳ dễ sử dụng và giúp việc trích xuất và tải xuống dữ liệu nhanh chóng và dễ dàng. Để bắt đầu sử dụng Instaloader, trước tiên, hãy cài đặt nó bằng pip:
pip install instaloader
Sau khi cài đặt, bạn có thể sử dụng nó từ giao diện dòng lệnh của nó hoặc dưới dạng một gói trong tập lệnh Python.
Để sử dụng nó từ dòng lệnh, bạn sử dụng lệnh instaloader. Ví dụ: để hiển thị thông tin trợ giúp, bạn nhập lệnh sau vào terminal:
instaloader --help
Để tải xuống ảnh hồ sơ của người dùng, bạn nhập lệnh với thẻ –profile, theo sau là tên người dùng. Như vậy:
instaloader --profile <USERNAME OF THE PROFILE>
Nhưng để lệnh này hoạt động, trước tiên bạn cần đăng nhập. Để làm như vậy, bạn chuyển vào tùy chọn đăng nhập để:
instaloader --login <YOUR USERNAME> --profile <USERNAME OF THE PROFILE>
tải gì
Với Instaloader, bạn có thể tải xuống các phương tiện khác nhau. Đoạn trích này của trang hướng dẫn hiển thị cho bạn tất cả những thứ khác nhau mà bạn có thể tải xuống:
profile Download profile. If an already-downloaded profile has been renamed, Instaloader automatically finds it by its unique ID and renames the folder likewise. @profile Download all followees of profile. Requires --login. Consider using :feed rather than @yourself. "#hashtag" Download #hashtag. %location_id Download %location_id. Requires --login. :feed Download pictures from your feed. Requires --login. :stories Download the stories of your followees. Requires --login. :saved Download the posts that you marked as saved. Requires --login. -- -shortcode Download the post with the given shortcode filename.json[.xz] Re-Download the given object. +args.txt Read targets (and options) from given textfile.
Để tải xuống các bài đăng của một người dùng cụ thể, bạn sẽ nhập lệnh:
instaloader --login <YOUR USERNAME> <TARGET USERNAME>
Trong trường hợp này, tên người dùng của bạn là tên người dùng của tài khoản Instagram đã xác thực của bạn; tên người dùng mục tiêu là hồ sơ có bài đăng mà bạn muốn tải xuống.
Để tải xuống các bài đăng từ những người theo dõi hồ sơ, bạn sẽ nhập lệnh:
instaloader --login <YOUR USERNAME> @<TARGET USERNAME>
Lưu ý sự khác biệt giữa lệnh này và lệnh trước đó là @ trước tên người dùng mục tiêu.
Một cách khác để sử dụng giao diện dòng lệnh của Instaloader là sử dụng nó dưới dạng gói Python. Các gói là tài liệu tốt ở đây.
Với Instaloader, bạn có thể tải xuống các tệp phương tiện khác nhau. Tuy nhiên, nếu bạn muốn trích xuất siêu dữ liệu, chẳng hạn như trang tiểu sử của người dùng, thì chỉ Instaloader là không đủ. Với phương pháp tiếp theo, bạn sẽ viết Python Script để trích xuất dữ liệu của hồ sơ người dùng.
Viết tập lệnh Python để tải xuống dữ liệu Instagram
Tổng quan
Trong phương pháp này, chúng tôi sẽ viết một tập lệnh đơn giản để tải xuống dữ liệu Instagram bằng Python. Phương pháp này dựa vào việc sử dụng API JSON tương đối xa lạ của Instagram để trích xuất dữ liệu từ hồ sơ công khai.
Cách thức hoạt động của API này là nếu bạn thêm truy vấn __a=1&__d=1 vào cuối URL hồ sơ của mình, thì Instagram sẽ phản hồi bằng dữ liệu JSON về hồ sơ.
Ví dụ: tên người dùng của tôi là 0xanesu. Do đó, nếu tôi yêu cầu https://instagram.com/instagram/?__a=1&__d=1, tôi sẽ nhận lại dữ liệu JSON về hồ sơ của mình dưới dạng phản hồi.
Viết kịch bản
Để thực hiện yêu cầu bằng Python, chúng ta sẽ sử dụng mô-đun yêu cầu Python. Tuy nhiên, bạn cũng có thể sử dụng pycURL, urllib hoặc bất kỳ thư viện máy khách nào khác mà bạn muốn sử dụng để thực hiện các yêu cầu HTTP. Để bắt đầu, hãy cài đặt mô-đun yêu cầu bằng pip.
pip install requests
Khi đã được cài đặt, hãy mở một tệp để viết tập lệnh của bạn và nhập hàm get từ mô-đun yêu cầu. Ngoài ra, cũng nhập chức năng tải từ json. Điều này sẽ được sử dụng để phân tích phản hồi JSON.
from requests import get from json import loads
Khi bạn đã nhập dữ liệu, hãy tạo một biến lưu trữ URL tới trang cá nhân Instagram của bạn.
url="https://instagram.com/<YOUR USERNAME HERE>"
Như đã đề cập trước đây, để trích xuất dữ liệu Instagram từ hồ sơ, bạn cần thêm các tham số truy vấn __a=1 và __d=1. Để xác định chúng, chúng tôi tạo một đối tượng từ điển với các tham số.
params = { '__a': 1, '__d': 1 }
Để cho phép các yêu cầu chúng tôi thực hiện, Instagram yêu cầu ID phiên. Phần sau, tôi sẽ chỉ cho bạn cách lấy ID phiên của bạn. Hiện tại, chỉ cần đặt một giá trị giữ chỗ mà bạn sẽ thay thế sau này.
cookies = { 'sessionid': '<YOUR SESSION ID HERE>' }
Tiếp theo, xác định một chức năng sẽ chạy khi yêu cầu thành công.
def on_success(response): profile_data_json = response.text parsed_data = loads(profile_data_json) print('User fullname:', parsed_data['graphql']['user']['full_name']) print('User bio:', parsed_data['graphql']['user']['biography'])
Hàm tôi đã xác định sẽ lấy đối tượng phản hồi, trích xuất JSON từ nội dung phản hồi và sau đó phân tích cú pháp JSON thành một đối tượng. Sau đây tôi chỉ trích họ tên và tiểu sử của hồ sơ.
Tiếp theo, xác định chức năng sẽ chạy nếu có lỗi.
def on_error(response): # Printing the error if something went wrong print('Something went wrong') print('Error Code:', response.status_code) print('Reason:', response.reason)
Sau đó, chúng tôi gọi hàm get để thực hiện yêu cầu, chuyển URL, tham số và cookie làm đối số.
response = get(url, params, cookies=cookies)
Cuối cùng, chúng tôi kiểm tra mã trạng thái của lỗi. Nếu trạng thái là 200, chúng ta gọi hàm on_success. Nếu không, chúng ta chỉ cần gọi hàm on_error.
if response.status_code == 200: on_success(response) else: on_error(response)
Tại thời điểm này, chúng tôi đã hoàn thành việc viết mã. Việc còn lại là lấy sessionid. Để lấy id phiên, hãy mở Google Chrome của bạn và mở Instagram trên Web. Đảm bảo bạn đã đăng nhập, sau đó mở Công cụ dành cho nhà phát triển bằng Ctrl + Shift + I hoặc Cmd + Shift + I.
Với Công cụ dành cho nhà phát triển đang mở, hãy mở tab Ứng dụng.
Sau đó nhấp vào menu con Cookie để xem Cookie được Instagram sử dụng.
Sau đó, sao chép giá trị của cookie sessionid từ danh sách cookie sẽ được liệt kê trong bảng điều khiển Công cụ dành cho nhà phát triển.
Khi bạn sao chép id phiên, hãy dán nó vào tập lệnh và thực thi tập lệnh. Trong trường hợp của tôi, sử dụng Instagram làm tên người dùng (https://instgram.com/instagram?__a=1&__d=1), đây là kết quả.
Và cứ như vậy, chúng tôi có thể tải xuống dữ liệu hồ sơ một cách linh hoạt. Có rất nhiều dữ liệu được trả về từ API JSON. Đây là đầu ra khi bạn in tất cả:
Và đó là cách bạn trích xuất dữ liệu và bài đăng từ hồ sơ Instagram.
Từ cuối cùng
Trong bài viết này, chúng tôi đã giới thiệu cách tải xuống các bài đăng và phương tiện bằng Instaloader. Sau đó, chúng tôi đã viết một tập lệnh tùy chỉnh để trích xuất dữ liệu JSON của hồ sơ bao gồm nhiều thứ hơn là chỉ nội dung phương tiện. Nếu bạn thích dự án này, bạn có thể muốn xem bài đăng của chúng tôi trên Python Timeit to Time Your Code.
Nếu bạn quan tâm đến việc tận dụng tối đa trải nghiệm Instagram của mình, hãy xem bài đăng của chúng tôi trên Qoob Stories: đánh giá chi tiết về trình tải xuống Instagram.