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.
Tartalomjegyzék
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.
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.
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.
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.