Hogyan töltsünk le Instagram-adatokat Python használatával

A Statista szerint az Instagram a világ egyik legnagyobb közösségi média hálózata, 2021-ben körülbelül 1,21 milliárd felhasználója van, vagyis az internet körülbelül 28%-a.

Ez a cikk egy útmutató arról, hogyan töltheti le programozottan az Instagram-adatokat egy profilból Python használatával, két módszerrel. Az első módszer a média letöltése az Instaloader segítségével. A második egy egyszerű Python-szkript írása, amellyel JSON-adatokat kaphat a profilról.

Fontos megjegyezni, hogy az adatok kaparása sértheti az Instagram szolgáltatási feltételeit, ezért azt javasoljuk, hogy csak a fiókjából töltsön le adatokat.

Az Instaloader használata

Az Instaloader egy Python-csomag az Instagram média letöltésére. Hihetetlenül könnyen használható, és gyors és egyszerűvé teszi az adatok kinyerését és letöltését. Az Instaloader használatának megkezdéséhez először telepítse a pip használatával:

pip install instaloader

A telepítés után használhatja a parancssori felületről vagy csomagként egy Python-szkriptben.

A parancssorból való használathoz az instaloader parancsot kell használni. Például a súgó információinak megjelenítéséhez írja be a következő parancsot a terminálba:

instaloader --help

Egy felhasználó profilképének letöltéséhez írja be a parancsot egy –profile címkével, majd a felhasználónévvel. Például így:

instaloader --profile <USERNAME OF THE PROFILE>

De ahhoz, hogy ez a parancs működjön, először be kell jelentkeznie. Ehhez adja meg a bejelentkezési lehetőséget, így:

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

Mit kell letölteni

Az Instaloader segítségével különböző médiákat tölthet le. A kézikönyv oldalának ez a kivonata megmutatja az összes letölthető dolgot:

  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.

Egy adott felhasználó bejegyzéseinek letöltéséhez írja be a következő parancsot:

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

Ebben az esetben a felhasználónév a hitelesített Instagram-fiókjának felhasználóneve; a cél felhasználónév az a profil, amelynek bejegyzéseit le szeretné tölteni.

  Hogyan találja meg Instagram URL-jét?

Ha bejegyzéseket szeretne letölteni egy profil követőitől, írja be a következő parancsot:

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

Vegye figyelembe, hogy ez a parancs és az előző parancs közötti különbség a cél felhasználónév előtti @ jel.

Az Instaloader parancssori felületének alternatívája az, hogy Python-csomagként használja. A csomag itt jól dokumentált.

Az Instaloader segítségével különböző médiafájlokat tölthet le. Ha azonban metaadatokat, például egy felhasználói életrajzi oldalt szeretne kinyerni, az Instaloader önmagában nem lenne elég. A következő módszerrel Python Scriptet fog írni a felhasználói profil adatainak kinyeréséhez.

Python-szkript írása az Instagram-adatok letöltéséhez

Áttekintés

Ebben a módszerben egy egyszerű szkriptet írunk az Instagram-adatok Pythonban történő letöltéséhez. Ez a módszer egy viszonylag ismeretlen Instagram JSON API használatán alapul az adatok nyilvános profilokból való kinyerésére.

  Részletes áttekintés az Instagram letöltőn

Ez az API úgy működik, hogy ha hozzáfűzi a __a=1&__d=1 lekérdezést a profil URL-jének végéhez, az Instagram a profilra vonatkozó JSON-adatokkal válaszol.

Például a felhasználónevem 0xanesu. Ennek eredményeként, ha kérelmet intézek a https://instagram.com/instagram/?__a=1&__d=1 címen, válaszként visszakapom a profilom JSON-adatait.

A forgatókönyv megírása

A kérés Pythonban történő végrehajtásához a Python kérések modulját fogjuk használni. Használhatja azonban a pycURL-t, az urllib-et vagy bármely más ügyfélkönyvtárat is, amelyet szeretne HTTP-kérésekhez használni. A kezdéshez telepítse a kérések modult a pip használatával.

pip install requests

A telepítés után nyisson meg egy fájlt a szkript írásához, és importálja a get függvényt a kérések modulból. Ezenkívül importálja a loads függvényt is a json-ból. Ez a JSON-válasz elemzésére szolgál.

from requests import get
from json import loads

Az adatok importálása után hozzon létre egy változót, amely az Instagram-profil URL-jét tárolja.

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

Mint korábban említettük, az Instagram-adatok profilból való kinyeréséhez hozzá kell adni a __a=1 és __d=1 lekérdezési paramétereket. Ezek meghatározásához létrehozunk egy szótárobjektumot a paraméterekkel.

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

Az általunk benyújtott kérések engedélyezéséhez az Instagramnak munkamenet-azonosítóra van szüksége. A későbbiekben megmutatom, hogyan szerezheti be a munkamenet-azonosítót. Egyelőre csak adjon meg egy helyőrző értéket, amelyet később helyettesít.

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

Ezután határozzon meg egy függvényt, amely akkor fut le, ha a kérés sikeres.

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

Az általam meghatározott függvény beveszi a válaszobjektumot, kibontja a JSON-t a választörzsből, majd elemzi a JSON-t egy objektummá. Ezek után csak a profil teljes nevét és életrajzát szedem ki.

Ezután határozza meg azt a függvényt, amely hiba esetén futni fog.

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)

Ezután meghívjuk a get függvényt a kérés végrehajtásához, argumentumként átadva az URL-t, a paramétereket és a cookie-kat.

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

Végül ellenőrizzük a hiba állapotkódját. Ha az állapot 200, akkor az on_success függvényt hívjuk meg. Egyébként csak az on_error függvényt hívjuk meg.

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

Ezen a ponton befejeztük a kód írását. Ami maradt, az a sessionid beszerzése. A munkamenet-azonosító beszerzéséhez nyissa meg a Google Chrome-ot, és nyissa meg az Instagramot a weben. Győződjön meg arról, hogy bejelentkezett, majd nyissa meg a Fejlesztői eszközöket a Ctrl + Shift + I vagy a Cmd + Shift + I billentyűkombinációval.

  Hogyan nézheti meg, ki osztotta meg Instagram-bejegyzését

A Dev Tools megnyitásakor nyissa meg az Alkalmazás lapot.

Ezután kattintson a Cookie-k almenüre az Instagram által használt cookie-k megtekintéséhez.

Ezután másolja ki a sessionid cookie értékét a cookie-k listájáról, amelyek a Fejlesztői eszközök panelen fognak megjelenni.

Miután kimásolta a munkamenet-azonosítót, illessze be a szkriptbe, és futtassa a szkriptet. Az én esetemben, ha az Instagramot használom felhasználónévként (https://instgram.com/instagram?__a=1&__d=1), ez a kimenet.

És éppen így képesek vagyunk dinamikusan letölteni a profiladatokat. Sokkal több adat érkezik vissza a JSON API-ból. Ez a kimenet, amikor az egészet kinyomtatja:

És így nyerhet ki adatokat és bejegyzéseket az Instagram-profilokból.

Végső szavak

Ebben a cikkben végignéztük, hogyan tölthet le bejegyzéseket és médiát az Instaloader segítségével. Ezután írtunk egy egyéni szkriptet a profil JSON-adatok kinyerésére, amelyek sokkal többet tartalmaznak, mint csak a médiatartalom. Ha tetszett ez a projekt, érdemes megnézni a Python Timeit a kód időzítésére vonatkozó bejegyzésünket.

Ha szeretnél többet kihozni Instagram-élményedből, nézd meg a Qoob Stories című bejegyzésünket: részletes áttekintés az Instagram letöltőről.