Télécharger les images d'un contenu

Le problème exposé dans ce sujet a été résolu.

Bonsoir,

Je souhaite récupérer les images de contenus pour les placer dans une autre galerie, mais je ne trouve aucun moyen de récupérer ces images : elles ne sont pas les exports de contenu et il n’y a pas de bouton de téléchargement depuis une galerie ni depuis une image.

Est-ce moi qui rate quelque chose ou ce n’est pas possible ? :-°

Merci,

Salut,

Je te confirme qu’il n’y a actuellement pas de lien pour télécharger toutes les images d’une galerie dans une archive. Cela dit, je peux facilement le faire à la main si tu le souhaites. Je te laisse m’envoyer un message privé avec le lien de la galerie que tu souhaites exporter et je te fais ça ! ;)

+1 -0

Salut,

Si besoin j’ai aussi un script qui permet de lister le contenu d’une galerie :

#!/usr/bin/env python

import sys
from urllib.parse import urljoin

import lxml.html
import requests


def find_images_page(page_url, cookies):
    req = requests.get(page_url, cookies=cookies)
    doc = lxml.html.fromstring(req.text)

    img_links = doc.xpath('//div[contains(@class, "gallery-item")]//a')
    images = {}
    for img_link in img_links:
        img_src, = img_link.xpath('.//img/@src')
        img_src, _, _ = img_src.rsplit('.', 2)
        img_src = urljoin(page_url, img_src)
        img_name, = img_link.xpath('.//span[@class="topic-title"]/text()')
        img_edit_link = urljoin(page_url, img_link.get('href'))
        images[img_src] = img_name, img_edit_link

    try:
        rel_next_url, = doc.xpath('(//a[@rel="next"]/@href)[1]')
        next_url = urljoin(page_url, rel_next_url)
    except ValueError:
        next_url = None

    return next_url, images


def iter_gallery_images(gallery_url, cookies):
    next_url = gallery_url
    while next_url is not None:
        next_url, images = find_images_page(next_url, cookies)
        for img_src, (img_name, edit_link) in images.items():
            yield img_src, img_name, edit_link


if __name__ == '__main__':
    if len(sys.argv) < 3:
        print(f'Usage: {sys.argv[0]} gallery_url session_id', file=sys.stderr)
        sys.exit(1)

    _, gallery_url, session_id, *_ = sys.argv

    if not gallery_url.startswith('https://zestedesavoir.com/galerie/'):
        print(f'Malformatted gallery URL', file=sys.stderr)
        sys.exit(1)

    cookies = {'sessionid': session_id}

    for img in iter_gallery_images(gallery_url, cookies):
        print(img)

Il attend en arguments l’URL de la galerie et un cookie de session :

% ./list_gallery.py https://zestedesavoir.com/galerie/5033/un-zeste-de-python/ xxx
('https://zestedesavoir.com/media/galleries/5033/317dfa35-7290-48da-a768-5908658c2392.gif', 'automate_gif.gif', 'https://zestedesavoir.com/galerie/5033/image/64363/modifier/')
('https://zestedesavoir.com/media/galleries/5033/4f19d7dd-eece-4750-acd6-fed6f10ae9c4.png', 'automate.png', 'https://zestedesavoir.com/galerie/5033/image/64364/modifier/')
('https://zestedesavoir.com/media/galleries/5033/9fbc5d78-816d-4c61-a851-6cc5cc709354.jpg', 'batteries_included.jpg', 'https://zestedesavoir.com/galerie/5033/image/64365/modifier/')
...

Tu peux trouver ce cookie de session dans ton navigateur en inspectant les cookies liés à Zeste de Savoir :

Cookie de session
Cookie de session

Le script ne fait que lister le contenu de la galerie, mais il est facile de l’adapter pour télécharger les images (ajouter un request.get et enregistrer les données dans un fichier).

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte