• 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

    Aucun commentaire pour le moment

    Suivre le flux RSS des commentaires


    Ajouter un commentaire

    Nom / Pseudo :

    E-mail (facultatif) :

    Site Web (facultatif) :

    Commentaire :