Scraper des données sur une page web en Python avec BeautifulSoup [Résolu/Fermé]

Signaler
Messages postés
278
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
17 avril 2019
-
Messages postés
278
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
17 avril 2019
-
Bonjour,

1. Lorsque j'utilise ce code Python ci-dessous :
>>> requete = requests.get("https://zestedesavoir.com/bibliotheque/")
>>> page = requete.content
>>> soup = BeautifulSoup(page)
>>> div = soup.find("div", {"class": "linkbox-item primary"})
>>> print(div.string)

Pourquoi le résultat obtenu est "None", et non la liste de tous les éléments des <div class="linkbox-item primary"></div> de la page ?


2. Par ailleurs, pourquoi ce code ci :
>>> h1 = soup.find_all
>>> liste_titre = [elt.string.strip() for elt in h1]

ne fonctionne pas et me renvoie à l'erreur :
Traceback (most recent call last):
File "<pyshell#49>", line 1, in <module>
liste_titre = [elt.string.strip() for elt in h1]
TypeError: 'method' object is not iterable

En vous remerciant par avance :)

Configuration: Macbook Pro Retina 13" mi-2014

1 réponse

Messages postés
849
Date d'inscription
mercredi 20 juin 2018
Statut
Membre
Dernière intervention
15 novembre 2019
104
L'objet renvoyé contenu dans la variable "div" est un objet Tag de BeautifulSoup. Selon la documentation :
https://www.crummy.com/software/BeautifulSoup/bs4/doc/#tag

il n'existe pas de champ "string" dans cet objet. Par contre, si tu fais
print(div)
tu obtiens un résultat exploitable.

Concernant le deuxième point, il y a à mon avis une erreur. "find_all" est une fonction et non un attribut soit :
h1 = soup.find_all(…) # ne pas oublier de mettre les bons paramètres
Messages postés
374
Date d'inscription
vendredi 25 septembre 2015
Statut
Membre
Dernière intervention
6 mars 2020
167 >
Messages postés
278
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
17 avril 2019

Bonjour,
je ne connais pas BeautifulSoup mais si
print(div)
affiche None,
print(div.string)
devrai générer une erreur et pas afficher None. Il y a une incohérence quelque part.
Messages postés
849
Date d'inscription
mercredi 20 juin 2018
Statut
Membre
Dernière intervention
15 novembre 2019
104 >
Messages postés
374
Date d'inscription
vendredi 25 septembre 2015
Statut
Membre
Dernière intervention
6 mars 2020

ça me paraît logique aussi. j'y avais pas vraiment réfléchi
Messages postés
278
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
17 avril 2019
31
Je viens de réessayer aujourd'hui dans les deux cas, à chaque fois, on me renvoie None
Messages postés
374
Date d'inscription
vendredi 25 septembre 2015
Statut
Membre
Dernière intervention
6 mars 2020
167
Je viens de faire le test et j'obtiens un résultat comme Jithel.
Si vous faites
print(div,div.string,type(div),type(div.string))
, quel résultat obtenez-vous ?
Messages postés
278
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
17 avril 2019
31
ça fonctionne, merci beaucoup :)