Scrap le alt d'une image d'un site python (Beautiful Soup)

Scrapper le alt d'une image d'un site python

a marqué ce sujet comme résolu.

Bonsoir à tous, j’aimerais récupérer le alt d’une image d’un site. J’ai donc codé ceci :

for span in soup.find_all(class_="seven-day-fc2"):
     for img in span.find_all("img"):
        print(img["alt"])

Ceci me renvoie le alt de toutes les images de la div, j’aimerais qu’elle me renvoie seulement le alt de la première image de la div.

Cordialement, merci.

+0 -0

Salut,

Je pense c’est la librairie Beautiful Soup que tu utilises, tu as deux possibilités selon la doc :

  • tu peux ajouter l’argument limit=1 à l’appel de la fonction find_all(), ce qui aura pour effet d’arrêter la recherche dès le premier résultat ;
  • ou bien tu peux utiliser la fonction find() à la place, qui est « presque équivalente » à la première solution, la différence étant qu’ici, elle ne retournera pas une liste mais juste le premier résultat.
+1 -0

Tu n’as peut être pas encapsulé ton code dans une fonction qui te serait personnel, tu appelles la fonction find_all lorsque tu fais span.find_all("img"). Ce que le message de Deuchnord veut dire c’est qu’il t’est possible d’ajouter un autre paramètre en plus de "img" qui limite le nombre d’éléments retournés.

Cela donnerait span.find_all("img", limit=1).

Je comprends que quand on est débutant tout ce vocabulaire peut vite prêter à confusion, c’est en partie pour ça que @entwanne a créé le tutoriel un zeste de python où tu retrouveras un peu tout ça pour t’aider avec quelques explications supplémentaires ainsi que des exercices si le coeur t’en dit.

Merci @deuchnord mais je n’utilise pas de fonction Ça fait une heure et demi que je suis dessus et je n’ai toujours pas trouvé la solution, ça me parait pourtant simple…

rix27

Bonjour,

Ce que veut dire Deuchnord ici c’est d’ajouter le pararametre limit=1 la ou tu as écrit span.find_all("img").

Mais je vois des cas ou ça serait problématique car dans ton code, tu essayes de lister toutes les span, puis dans chaque span tu cherche des images, ce n’est pas très optimal.

Tu peux directement passer par le css pour rechercher la première image de ta div de cette manière.

img = soup.find_all(".seven-day-fc2 img") # ici on utilise le selecteur en css pour cibler la classe et on lui dit de chercher une image dans un bloc qui a pour class "seven-day-fc2"
print(img["alt"]) # on affiche le contenu du alt

NB: je n’ai pas testé ce qui est ecrit, des erreurs de syntaxes peuvent exister.

Edit: grillé en partie par artragis

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