Menu

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

Messages postés
278
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
17 avril 2019
- - Dernière réponse : nik029
Messages postés
278
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
17 avril 2019
- 9 avril 2019 à 10:20
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

Afficher la suite 

Votre réponse

1 réponse

Messages postés
834
Date d'inscription
mercredi 20 juin 2018
Statut
Membre
Dernière intervention
17 avril 2019
61
0
Merci
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
quent217
Messages postés
271
Date d'inscription
vendredi 25 septembre 2015
Statut
Membre
Dernière intervention
20 avril 2019
86 > nik029
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.
Jithel
Messages postés
834
Date d'inscription
mercredi 20 juin 2018
Statut
Membre
Dernière intervention
17 avril 2019
61 > quent217
Messages postés
271
Date d'inscription
vendredi 25 septembre 2015
Statut
Membre
Dernière intervention
20 avril 2019
-
ça me paraît logique aussi. j'y avais pas vraiment réfléchi
nik029
Messages postés
278
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
17 avril 2019
26 -
Je viens de réessayer aujourd'hui dans les deux cas, à chaque fois, on me renvoie None
quent217
Messages postés
271
Date d'inscription
vendredi 25 septembre 2015
Statut
Membre
Dernière intervention
20 avril 2019
86 -
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 ?
nik029
Messages postés
278
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
17 avril 2019
26 -
ça fonctionne, merci beaucoup :)
Commenter la réponse de Jithel