-
Chercher dans l'arbre
Reprenons notre exemple habituel : le site de bougies parfumées Scandles
Scandles est un site marchand Wordpress qui utilise l'extension commerce Woocommerce.
Supposons que nous voulions extraire de la page produit, le prix et le titre de la bougie
from bs4 import BeautifulSoup
import requests
u="http://www.scandles.fr"
html = requests.get(u)
data = html.content
bsObj = BeautifulSoup(data)
Pour extraire le prix et le titre de la page que nous venons de lire il faut savoir où chercher.
Le plus simple est d'utiliser un inspecteur Web (celui de votre navigateur préféré) et de regarder comment sont balisés les titres et prix.
Pour la page qui nous concerne, le titre est en h1 et le prix en <span class="amount">
Essayons :
bsObj.h1
<h1 class="entry-title" itemprop="name">Le l\xe9opard de l\u2019Objet pour Scandles</h1>
C'est bon pour le titre.
bsObj.find("span",{"class":"amount"})
<span class="amount">0.00\xa0\u20ac</span>
Par contre ce n'est pas le cas pour le titre car il y a plusieurs <span class="amount"> dans le document.
La preuve :
bsObj.findAll("span",{"class":"amount"})
donne :
[<span class="amount">0.00\xa0\u20ac</span>, <span class="amount">41.00\xa0\u20ac</span>, <span class="amount">42.00\xa0\u20ac</span>, <span class="amount">85.00\xa0\u20ac</span>, <span class="amount">95.00\xa0\u20ac</span>, <span class="amount">100.00\xa0\u20ac</span>, <span class="amount">46.00\xa0\u20ac</span>, <span class="amount">90.00\xa0\u20ac</span>, <span class="amount">95.00\xa0\u20ac</span>, <span class="amount">124.00\xa0\u20ac</span>, <span class="amount">98.00\xa0\u20ac</span>, <span class="amount">95.00\xa0\u20ac</span>, <span class="amount">100.00\xa0\u20ac</span>, <span class="amount">85.00\xa0\u20ac</span>, <span class="amount">41.00\xa0\u20ac</span>, <span class="amount">42.00\xa0\u20ac</span>, <span class="amount">95.00\xa0\u20ac</span>, <span class="amount">55.00\xa0\u20ac</span>]
Faisons différemment en attaquant plus haut. Le prix est aussi en <p class="large">
bsObj.findAll("p",{"class":"large"})
[<p class="price large"><span class="amount">100.00\xa0\u20ac</span></p>]
C'est bon il n'y en a qu'un. On retient cette solution. On verra dans un autre post comment obtenir le prix en numérique.
-
Commentaires