Tin tức và phân tích của tất cả các thiết bị di động

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

Theo Statista Instagram là một trong những mạng xã hội lớn nhất thế giới, với khoảng 10,21 tỷ người dùng vào năm 2021, tương đương khoảng 28% Internet.

Bài viết này là hướng dẫn về cách lấy dữ liệu hồ sơ Instagram theo chương trình bằng python theo hai cách. 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ơ.

Xin lưu ý rằng việc tải xuống dữ liệu có thể vi phạm điều khoản dịch vụ Instagramvì vậy 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 cài đặt

Instaloader là gói Python để tải xuống phương tiện từ Instagram. Nó cực kỳ dễ sử dụng và giúp việc trích xuất và truy xuất dữ liệu trở nên 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, nó có thể được sử dụng từ giao diện dòng lệnh hoặc dưới dạng gói trong tập lệnh python.

Để sử dụng nó từ dòng lệnh, hãy sử dụng lệnh installloader. Ví dụ: để xem thông tin trợ giúp, hãy nhập lệnh sau vào terminal:

instaloader --help

Để tải xuống ảnh hồ sơ của người dùng, hãy nhập lệnh có thẻ -profile theo sau là tên người dùng. như thế này:

instaloader --profile <USERNAME OF THE PROFILE>

Nhưng để lệnh này hoạt động, trước tiên bạn cần phải đăng nhập. Để thực hiện việc này, bạn chuyển tùy chọn đăng nhập, vì vậy:

instaloader --login <YOUR USERNAME> --profile <USERNAME OF THE PROFILE>

Tải gì xuống

Với Instaloader, bạn có thể tải xuống nhiều phương tiện khác nhau. Đoạn trích trang man này hiển thị nhiều 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ìm nạp bài viết của một người dùng cụ thể, hãy nhập:

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 đã được 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 bạn muốn tìm nạp.

Để tìm nạp bài đăng từ những người theo dõi hồ sơ, hãy nhập:

instaloader --login <YOUR USERNAME> @<TARGET USERNAME>

Lưu ý rằng sự khác biệt giữa lệnh này và lệnh trước đó là dấu @ phía 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 Instaloader là sử dụng nó như một gói python. Gói này được ghi chép rõ ràng ở đây .

Với Instaloader, bạn có thể tải xuống nhiều 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ử người dùng, chỉ Instaloader là không đủ. Với phương pháp tiếp theo, bạn sẽ viết tập lệnh Python để trích xuất dữ liệu hồ sơ người dùng.

Viết tập lệnh Python để tìm nạp dữ liệu từ 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ìm nạp dữ liệu Instagram bằng python. Phương pháp này liên quan đến việc sử dụng một phương pháp tương đối chưa được biết đến. Instagram API JSON để trích xuất dữ liệu từ hồ sơ công khai.

Cách hoạt động của API này là nếu bạn thêm truy vấn __a=1&__d=1 ở cuối URL hồ sơ của bạn, Instagram sẽ phản hồi với dữ liệu JSON về hồ sơ.

Ví dụ: tên người dùng của tôi là 0xanesu. Kết quả là, nếu tôi gửi yêu cầu tới https://instagram.com/instagram/?__a=1&__d=1để đáp lại tôi sẽ lấy lại dữ liệu JSON về hồ sơ của mình.

Viết kịch bản

Để gửi yêu cầu trong python, chúng tôi 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 ứng dụng 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

Sau khi cài đặt, hãy mở tệp mà bạn muốn viết tập lệnh và nhập hàm get từ mô-đun yêu cầu. Ngoài ra, còn nhập hàm 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

Sau khi nhập dữ liệu, hãy tạo một biến chứa URL tới hồ sơ Instagram của bạn.

url="https://instagram.com/<YOUR USERNAME HERE>"

Như đã đề cập trước đó, để trích xuất dữ liệu Instagram từ một hồ sơ, bạn cần thêm tham số truy vấn __a=1 và __d=1. Để định nghĩa chúng, chúng ta 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. Sau này tôi sẽ chỉ cho bạn cách lấy id phiên. Hiện tại, chỉ cần đặt một giá trị giữ chỗ mà bạn sẽ thay thế sau.

cookies = { 'sessionid': '<YOUR SESSION ID HERE>' }

Sau đó xác định một hàm 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 một đố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 đó tôi chỉ trích xuất tên đầy đủ và tiểu sử hồ sơ.

Sau đó xác định một hàm sẽ chạy khi xảy ra 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 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 tôi chỉ gọi 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 đã viết xong mã. Vẫn còn để lấy id phiên. Để lấy id phiên, hãy mở google chrome 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.

Khi Công cụ dành cho nhà phát triển mở, hãy mở tab Ứng dụng.

Sau đó nhấp vào menu con Cookies để xem các cookie được sử dụng bởi Instagram.

Sau đó sao chép giá trị cookie sessionid từ danh sách cookie sẽ được hiển thị trong bảng Công cụ dành cho nhà phát triển.

Sau khi sao chép ID phiên, dán nó vào tập lệnh và chạy 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ìm nạp 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à kết quả sau khi in mọi thứ:

Và đó là cách bạn trích xuất dữ liệu và bài đăng từ hồ sơ Instagram.

những từ cuối

Trong bài viết này, chúng tôi đã thảo luận về cách tải xuống 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 đa phương tiện. Nếu bạn thích dự án này, bạn có thể xem bài đăng của chúng tôi trên Python Timeit to Time Your Code.

Nếu bạn muốn có thêm lợi ích khi sử dụng Instagram, hãy xem bài đăng của chúng tôi trên Qoob Stories: Đánh giá chuyên sâu về trình tải xuống Instagram.

Mục lục