Scraper des données sur une page web en Python avec BeautifulSoup

Résolu/Fermé
nik029 Messages postés 281 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 13 avril 2022 - 7 avril 2019 à 18:18
nik029 Messages postés 281 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 13 avril 2022 - 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

A voir également:

1 réponse

Jithel Messages postés 843 Date d'inscription mercredi 20 juin 2018 Statut Membre Dernière intervention 31 août 2021 171
7 avril 2019 à 18:46
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
0
nik029 Messages postés 281 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 13 avril 2022 44
7 avril 2019 à 18:50
Avec
print(div)
, j'obtiens toujours None.
0
Jithel Messages postés 843 Date d'inscription mercredi 20 juin 2018 Statut Membre Dernière intervention 31 août 2021 171 > nik029 Messages postés 281 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 13 avril 2022
7 avril 2019 à 21:24
Je ne sais pas alors parce que j'ai fait exactement la même chose en Python 3.7, j'obtiens un résultat
0
quent217 Messages postés 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024 344 > nik029 Messages postés 281 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 13 avril 2022
7 avril 2019 à 22:02
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.
0
Jithel Messages postés 843 Date d'inscription mercredi 20 juin 2018 Statut Membre Dernière intervention 31 août 2021 171 > quent217 Messages postés 421 Date d'inscription vendredi 25 septembre 2015 Statut Membre Dernière intervention 1 mars 2024
8 avril 2019 à 00:02
ça me paraît logique aussi. j'y avais pas vraiment réfléchi
0
nik029 Messages postés 281 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 13 avril 2022 44
8 avril 2019 à 11:14
Je viens de réessayer aujourd'hui dans les deux cas, à chaque fois, on me renvoie None
0