Extraire une image ou une vidéo Instagram ou Twitter avec Python

Extraire une image ou une vidéo Instagram ou Twitter avec Python

Les images que l’on peut voir dans le fil d’actu d’Instagram ou Twitter sont formatées de sorte à s’afficher selon un certain format. Mais les images d’origine sont tout de même stockées quelque part et des fois, il est plus agréable de les voir en vraie grandeur. Nous allons voir comment extraire une image ou une vidéo d’Instagram ou de Twitter avec Python.

À vrai dire, ce n’est pas très compliqué : quand on clique sur une image, une URL apparaît dans la barre dédiée. Prenons par exemple le post de l’URL https://www.instagram.com/p/B_5znnklwxM/ (j’ai pris un compte au hasard, celui de Tom Holland).

Extraire une vidéo ou une image d’un compte Instagram comme celui de Tom Holland par exemple

Extraire le code HTML

La première chose que j’ai faite est d’extraire le code HTML du lien. C’est possible à l’aide de la librairie requests :

import requests
r = requests.get("https://www.instagram.com/p/B_5znnklwxM/").text

r représente ici le code HTML. Je l’ai sauvegardé dans un fichier texte et l’ai analysé pour savoir où était l’image. Ce n’est pas très compliqué car elle est indiquée à l’aide de la balise <meta property=”og:image” content=”lien de l’image” />.

Extraire le lien de l’image

Il me suffit donc de trouver la position du texte “<meta property=”og:image”” et de prendre la chaîne de caractères qui suit le “content=””. On le fait à l’aide de la méthode find :

p = r.find("<meta property=\"og:image" content=\"")

qui retourne la position de la chaîne “<meta property=\”og:image” content=\”” dans r. Il suffira de prendre tous les caractères après r+35 (car il y a 35 caractères dans “<meta property=\”og:image” content=\””).

p = r.find("<meta property=\"og:image\" content=\"")
link = ""
i = 35
while r[p+i] != "\"":
    link += r[p+i]
    i += 1
    
print(link)

Ouvrir directement l’image dans Firefox

Ce qui est pratique, c’est d’ouvrir directement l’image plutôt que de faire un copier-coller. J’utilise pour cela la librairie webbrowser.

import webbrowser
webbrowser.register('firefox',
    None,
    webbrowser.BackgroundBrowser("C://Program Files//Mozilla Firefox//firefox.exe"))
webbrowser.get('firefox').open(link)

Bien entendu, si vous utilisez un autre navigateur, ou si vous n’êtes pas sous windows, il suffit de changer le chemin vers le navigateur.

Script complet

import requests
import webbrowser

url = "https://www.instagram.com/p/B_5znnklwxM/"
r = requests.get(url).text

p = r.find("<meta property=\"og:image\" content=\"")
link = ""
i = 35
while r[p+i] != "\"":
    link += r[p+i]
    i += 1
 
webbrowser.register('firefox',
    None,
    webbrowser.BackgroundBrowser("C://Program Files//Mozilla Firefox//firefox.exe"))
webbrowser.get('firefox').open(link)

Et pour extraire les vidéos d’Instagram ?

Et bien, c’est pratiquement la même chose ! Il suffit juste de rechercher no plus “og:image” mais… (suspens…) “og:video” !

Ce qui est intéressant, c’est de remarquer que si le média concerné est une image, la balise “og:video” n’apparaît pas. On peut alors faire un programme pour détecter automatiquement le type de média ! Et cela donne :

import requests
import webbrowser

def saisie_url():
    return input("Entrez l'URL instagram : ")

def extraction(url,type_media):       
    p = r.find("<meta property=\"og:"+type_media+"\" content=\"")
    link = ""
    i = 35
    while r[p+i] != "\"":
        link += r[p+i]
        i += 1
    
    webbrowser.register('firefox',
        None,
        webbrowser.BackgroundBrowser("C://Program Files//Mozilla Firefox//firefox.exe"))
    webbrowser.get('firefox').open(link)
    
if __name__ == "__main__":
    url = ""
    while url == "":
        url = saisie_url()
    
    r = requests.get(url).text
    if "og:video" in r:
        extraction(url , "video")
    else:
        extraction(url , "image")

Et avec Twitter ?

Le principe est le même. En scrutant le code HTML, on s’aperçoit tout de même une légère différence de syntaxe. Il faut donc peaufiner le script Python en fonction du réseau social.

Les abonné.e.s de ce site pourront trouver le script sur cette page.

Vous voyez qu’en définitive, extraire une image ou une vidéo d’Instagram ou de Twitter n’est pas très compliqué et peut être fait avec un code Python assez court.

Mais attention : cette méthode ne fonctionne que pour les posts Instagram ayant qu’une photo. Pour ceux avec plusieurs photos, il ne permet que d’afficher la première… Il faut donc modifier le script. Dans le script que les abonée.s. peuvent télécharger, j’ai modifié le script afin qu’il afficher toutes les images.

Edit du 28 mai 2020, à 15h55 : le script a été amélioré afin de pouvoir télécharger aussi bien les médias des stories que du fil d’actu d’Instagram et de Twitter. Pour l’extraction des médias des stories, le script s’appuie sur un serveur qui existe déjà donc si ce dernier est HS, le script ne renverra rien.

Evariste_Galois1973

Laissez votre message

Supportscreen tag