Scraper des données sur une page web en Python avec BeautifulSoup
Résolu
Bonjour,
1. Lorsque j'utilise ce code Python ci-dessous :
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 :
ne fonctionne pas et me renvoie à l'erreur :
En vous remerciant par avance :)
--
Une fois un problème résolu, mettez un +1 sur la réponse qui vous à aidez et mettez Problème Résolu ! ;-)
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
--
Une fois un problème résolu, mettez un +1 sur la réponse qui vous à aidez et mettez Problème Résolu ! ;-)
1 réponse
-
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 faisprint(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
-
-
@nik029Je ne sais pas alors parce que j'ai fait exactement la même chose en Python 3.7, j'obtiens un résultat
-
@nik029Bonjour,
je ne connais pas BeautifulSoup mais siprint(div)
affiche None,print(div.string)
devrai générer une erreur et pas afficher None. Il y a une incohérence quelque part. -
@quent217ça me paraît logique aussi. j'y avais pas vraiment réfléchi
-
-