
Uma ferramenta OSINT para Instagram que coleta todas as localizações georreferenciadas disponíveis em um perfil do Instagram para plotá-las em um mapa e despejá-las em um JSON.
TL;DR : ascineema, video do projeto
Uma ferramenta para extrair localizações georreferenciadas de perfis do Instagram. Saída em JSON e mapa interativo.
sudo apt install chromium-chromedriver && chmod a+x /usr/bin/chromedriver
git clone https://github.com/bernsteining/instaloctrack
cd instaloctrack
pip3 install .
Ou use Docker:
sudo docker build -t instaloctrack -f Dockerfile .
instaloctrack -h
usage: instaloctrack [-h] [-t TARGET_ACCOUNT] [-l LOGIN] [-p PASSWORD] [-v]
Instagram location data gathering tool. Usage: python3 instaloctrack.py -t <target_account>
optional arguments:
-h, --help show this help message and exit
-t TARGET_ACCOUNT, --target TARGET_ACCOUNT
Instagram profile to investigate
-l LOGIN, --login LOGIN
Instagram profile to connect to, in order to access
the instagram posts of the target account
-p PASSWORD, --password PASSWORD
Password of the Instagram profile to connect to
-v, --visual Spawns Chromium GUI, otherwise Chromium is headless
e.g.
instaloctrack -t <target_account>
Se o perfil alvo for privado e você tiver uma conta seguindo o perfil alvo, é possível extrair os dados com uma sessão conectada:
instaloctrack -t <target_account> -l <your_account> -p <your_password>
ou com Docker:
sudo docker run -v /tmp/output:/tmp/output instaloctrack -t <target_account> -o /tmp/output
Primeiro, recuperamos todos os links das fotos da conta rolando todo o perfil do Instagram, graças ao webdriver do Selenium.
Em seguida, recuperamos assincronamente (asyncio) cada link de foto, verificamos se contém uma localização na descrição da foto, e recuperamos os dados da localização se houver, e o timestamp.
Como o Instagram não fornece coordenadas GPS, e recebemos apenas nomes de lugares, precisamos geocodificá-los (ou seja, obter as coordenadas GPS a partir do nome do lugar).
Para isso, usei a excelente API do Nominatim, que utiliza o OpenStreetMap. Para nosso uso, nenhuma chave de API é necessária, e respeitamos a Política de Uso do Nominatim solicitando coordenadas GPS uma vez por segundo.
Eventualmente, quando temos todas as coordenadas GPS, geramos um HTML (graças ao template jinja2) com Javascript embutido que plota um Open Street Map (graças à biblioteca Leaflet) com todas as nossas localizações marcadas. Novamente, nenhuma chave de API é necessária para esta etapa.
Além disso, os dados coletados pelo script (nomes das localizações, timestamps, coordenadas GPS, erros) são salvos em um arquivo JSON para serem reutilizados.
Como exemplo, aqui está a saída no perfil do Instagram do ex-presidente francês, @fhollande:

O mapa de calor:

Informações disponíveis ao clicar em um marcador:

Estatísticas sobre os dados de localização:

O dump de dados JSON (apenas uma parte para mostrar o formato de uma localização específica):
{
"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"
}
}