Jak pobierać dane z Instagrama za pomocą Pythona

Według Statista Instagram to jedna z największych na świecie sieci społecznościowych, z około 1,21 miliarda użytkowników w 2021 roku, czyli około 28% internetu.

Ten artykuł jest przewodnikiem, jak programowo pobierać dane z Instagrama z profilu przy użyciu Pythona na dwa sposoby. Pierwsza metoda to pobieranie multimediów za pomocą Instaloadera. Drugi to napisanie prostego skryptu w Pythonie, aby uzyskać dane JSON o profilu.

Należy pamiętać, że pobieranie danych może naruszać warunki korzystania z serwisu Instagram, dlatego zalecamy pobieranie danych wyłącznie z konta.

Za pomocą Instaloadera

Instaloader to pakiet Pythona do pobierania multimediów z Instagrama. Jest niezwykle łatwy w użyciu i sprawia, że ​​wyodrębnianie i pobieranie danych jest szybkie i łatwe. Aby rozpocząć korzystanie z Instaloadera, najpierw zainstaluj go za pomocą pip:

pip install instaloader

Po zainstalowaniu można go używać z interfejsu wiersza poleceń lub jako pakietu w skrypcie Pythona.

Aby użyć go z wiersza poleceń, użyj polecenia installoader. Na przykład, aby wyświetlić informacje pomocy, wpisz w terminalu następującą komendę:

instaloader --help

Aby pobrać zdjęcie profilowe użytkownika, wprowadź polecenie z tagiem –profile, po którym następuje nazwa użytkownika. jak tak:

instaloader --profile <USERNAME OF THE PROFILE>

Ale aby to polecenie zadziałało, musisz się najpierw zalogować. Aby to zrobić, przekazujesz opcję logowania, więc:

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

Co pobrać

Dzięki Instaloader możesz pobierać różne media. Ten fragment strony podręcznika pokazuje różne rzeczy, które możesz pobrać:

  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.

Aby pobrać posty określonego użytkownika, wpisz polecenie:

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

W takim przypadku Twoją nazwą użytkownika jest nazwa użytkownika Twojego uwierzytelnionego konta na Instagramie; docelowa nazwa użytkownika to profil, którego posty chcesz pobrać.

Aby pobrać posty od obserwujących profil, wpisz polecenie:

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

Zwróć uwagę, że różnica między tym poleceniem a poprzednim to znak @ przed docelową nazwą użytkownika.

Alternatywą dla korzystania z interfejsu wiersza poleceń Instaloader jest użycie go jako pakietu Pythona. Pakiet jest dobrze udokumentowany tutaj.

Dzięki Instaloader możesz pobierać różne pliki multimedialne. Jeśli jednak chcesz wyodrębnić metadane, takie jak strona biografii użytkownika, sam Instaloader nie wystarczy. Za pomocą następnej metody napiszesz skrypt w języku Python, aby wyodrębnić dane profilu użytkownika.

Pisanie skryptu w Pythonie do pobierania danych z Instagrama

Przegląd

W tej metodzie napiszemy prosty skrypt do pobierania danych z Instagrama w Pythonie. Ta metoda polega na wykorzystaniu stosunkowo nieznanego Instagram JSON API do wydobywania danych z profili publicznych.

Sposób działania tego interfejsu API polega na tym, że jeśli dodasz zapytanie __a=1&__d=1 na końcu adresu URL swojego profilu, Instagram odpowie danymi JSON dotyczącymi profilu.

Na przykład moja nazwa użytkownika to 0xanesu. W rezultacie, jeśli złożę prośbę do https://instagram.com/instagram/?__a=1&__d=1, w odpowiedzi otrzymam z powrotem dane JSON dotyczące mojego profilu.

Pisanie Skryptu

Aby wysłać żądanie w Pythonie, użyjemy modułu żądań Pythona. Możesz jednak również użyć pycURL, urllib lub dowolnej innej biblioteki klienckiej, której wolisz używać do wysyłania żądań HTTP. Aby rozpocząć, zainstaluj moduł żądań za pomocą pip.

pip install requests

Po zainstalowaniu otwórz plik, w którym chcesz napisać skrypt i zaimportuj funkcję get z modułu request. Dodatkowo zaimportuj również funkcję loads z json. Zostanie to użyte do przeanalizowania odpowiedzi JSON.

from requests import get
from json import loads

Po zaimportowaniu danych utwórz zmienną przechowującą adres URL do Twojego profilu na Instagramie.

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

Jak wspomniano wcześniej, aby wyodrębnić dane z Instagrama z profilu, należy dodać parametry zapytania __a=1 i __d=1. Aby je zdefiniować, tworzymy obiekt słownika z parametrami.

params = { '__a': 1, '__d': 1 }

Aby autoryzować składane przez nas żądania, Instagram wymaga identyfikatora sesji. Później pokażę ci, jak uzyskać identyfikator sesji. Na razie po prostu umieść wartość zastępczą, którą później zastąpisz.

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

Następnie zdefiniuj funkcję, która zostanie uruchomiona, gdy żądanie zakończy się pomyślnie.

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'])

Funkcja, którą zdefiniowałem, przyjmie obiekt odpowiedzi, wyodrębni JSON z treści odpowiedzi, a następnie przeanalizuje JSON do obiektu. Następnie wyodrębniam tylko pełne imię i nazwisko oraz biografię profilu.

Następnie zdefiniuj funkcję, która zostanie uruchomiona w przypadku wystąpienia błędu.

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)

Następnie wywołujemy funkcję get, aby wykonać żądanie, przekazując adres URL, parametry i pliki cookie jako argumenty.

response = get(url, params, cookies=cookies)

Na koniec sprawdzamy kod stanu błędu. Jeśli status wynosi 200, wywołujemy funkcję on_success. W przeciwnym razie po prostu wywołujemy funkcję on_error.

if response.status_code == 200:
    on_success(response)
else:
    on_error(response)

W tym momencie zakończyliśmy pisanie kodu. Pozostało uzyskać identyfikator sesji. Aby uzyskać identyfikator sesji, otwórz Google Chrome i otwórz Instagram w sieci. Upewnij się, że jesteś zalogowany, a następnie otwórz Narzędzia deweloperskie za pomocą Ctrl + Shift + I lub Cmd + Shift + I.

Przy otwartych Narzędziach deweloperskich otwórz kartę Aplikacja.

Następnie kliknij podmenu Pliki cookie, aby wyświetlić pliki cookie używane przez Instagram.

Następnie skopiuj wartość pliku cookie sessionid z listy plików cookie, która zostanie wyświetlona w panelu Dev Tools.

Po skopiowaniu identyfikatora sesji wklej go do skryptu i uruchom skrypt. W moim przypadku, używając Instagrama jako nazwy użytkownika (https://instgram.com/instagram?__a=1&__d=1), to jest wynik.

I tak po prostu jesteśmy w stanie dynamicznie pobierać dane profilu. Jest o wiele więcej danych zwracanych z interfejsu API JSON. To jest wynik po wydrukowaniu wszystkiego:

I tak wydobywasz dane i posty z profili na Instagramie.

Ostatnie słowa

W tym artykule omówiliśmy sposób pobierania postów i multimediów za pomocą Instaloader. Następnie napisaliśmy niestandardowy skrypt, aby wyodrębnić dane JSON profilu, które obejmują znacznie więcej niż tylko zawartość multimedialną. Jeśli podobał Ci się ten projekt, możesz sprawdzić nasz post na temat Python Timeit to Time Your Code.

Jeśli chcesz uzyskać więcej korzyści z korzystania z Instagrama, sprawdź nasz post na Qoob Stories: szczegółową recenzję narzędzia do pobierania z Instagrama.