
Ein Instagram-OSINT-Tool, das alle geotaggten Standorte eines Instagram-Profils sammelt, um sie auf einer Karte darzustellen und in einer JSON-Datei auszugeben.
TL;DR : ascineema, Video des Projekts
Ein Tool zum Scrapen von Geotag-Standorten auf Instagram-Profilen. Ausgabe in JSON & interaktiver Karte.
sudo apt install chromium-chromedriver && chmod a+x /usr/bin/chromedriver
git clone https://github.com/bernsteining/instaloctrack
cd instaloctrack
pip3 install .
Oder mit Docker:
sudo docker build -t instaloctrack -f Dockerfile .
instaloctrack -h
usage: instaloctrack [-h] [-t TARGET_ACCOUNT] [-l LOGIN] [-p PASSWORD] [-v]
Tool zum Sammeln von Instagram-Standortdaten. Verwendung: python3 instaloctrack.py -t <target_account>
optionale Argumente:
-h, --help zeigt diese Hilfemeldung an und beendet
-t TARGET_ACCOUNT, --target TARGET_ACCOUNT
Instagram-Profil, das untersucht werden soll
-l LOGIN, --login LOGIN
Instagram-Profil, mit dem eine Verbindung hergestellt wird, um auf die Instagram-Beiträge des Zielkontos zuzugreifen
-p PASSWORD, --password PASSWORD
Passwort des Instagram-Profils, mit dem die Verbindung hergestellt wird
-v, --visual öffnet die Chromium-GUI, ansonsten läuft Chromium im Headless-Modus
z.B.
instaloctrack -t <target_account>
Falls das Zielprofil privat ist und Sie ein Konto haben, das dem Zielprofil folgt, können Sie die Daten mit einer verbundenen Sitzung scrapen:
instaloctrack -t <target_account> -l <your_account> -p <your_password>
oder mit Docker:
sudo docker run -v /tmp/output:/tmp/output instaloctrack -t <target_account> -o /tmp/output
Zuerst holen wir alle Bildlinks des Kontos ab, indem wir das gesamte Instagram-Profil durchscrollen, dank Seleniums Webdriver.
Dann holen wir asynchron (asyncio) jeden Bildlink ab, prüfen, ob er einen Ort in der Bildbeschreibung enthält, und rufen die Daten des Ortes sowie den Zeitstempel ab, falls vorhanden.
Da Instagram keine GPS-Koordinaten bereitstellt und uns nur Namen von Orten gegeben werden, müssen wir diese geokodieren (d.h. die GPS-Koordinaten aus dem Ortsnamen ermitteln).
Hierfür habe ich die großartige API von Nominatim verwendet, die OpenStreetMap nutzt. Für unsere Nutzung ist kein API-Schlüssel erforderlich, und wir respektieren Nominatims Nutzungsrichtlinien, indem wir die GPS-Koordinaten nur einmal pro Sekunde abfragen.
Schließlich, sobald wir alle GPS-Koordinaten haben, generieren wir ein HTML (dank Jinja2-Templating) mit eingebettetem JavaScript, das eine OpenStreetMap (dank der Leaflet-Bibliothek) mit allen markierten Orten zeichnet. Auch für diesen Schritt ist kein API-Schlüssel erforderlich.
Außerdem werden die vom Skript gesammelten Daten (Ortsnamen, Zeitstempel, GPS-Koordinaten, Fehler) in eine JSON-Datei ausgegeben, um wiederverwendet zu werden.
Als Beispiel hier die Ausgabe auf dem Instagram-Profil des ehemaligen französischen Präsidenten @fhollande:

Die Heatmap:

Verfügbare Informationen beim Klicken auf eine Markierung:

Statistiken über die Standortdaten:

Der JSON-Datendump (nur ein Teil, um das Format für einen bestimmten Ort zu zeigen):
{
"link": "https://www.instagram.com/p/-Q_9EvR9eu",
"place": {
"id": "290297",
"name": "Musée du quai Branly - Jacques Chirac",
"slug": "musee-du-quai-branly-jacques-chirac",
"street_address": " 37 quai Branly",
" zip_code": " 75007",
" city_name": " Paris",
" region_name": " ",
" country_code": " FR"
},
"timestamp": "2015-11-19",
"gps": {
"lat": "48.8566969",
"lon": "2.3514616"
}
}