IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

recherche d'information dans script html via beautifulsoup


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2023
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2023
    Messages : 33
    Par défaut recherche d'information dans script html via beautifulsoup
    Hello la team,

    Je vais avoir besoin de vous pour deux "petits" sujets d'extractions d'information dans un script html d'une page que je souhaite scraper.

    1. aller chercher une information dans "l'intitulé" d'une balise.

    Pour chercher entre les balises d'un html comme suite, c'est relativement simple et ca me retourne bien "Rolex Daytona"

    <div class="text-bold text-ellipsis">
    Rolex Daytona</div>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    marque = j.find("div", {"class":"text-bold text-ellipsis"}).get_text()
    Par contre, j'aimerais aller chercher des informations dans une balise et je n'y arrive pas

    inspection html qui me pose soucis, j'aimerais aller récupérer en automatique la valeur Rolex qui se trouve après data-manufacturer :
    <div class="full-width">
    <a href="/rolex/--6239--id27696090.htm" onclick="trackTeaserEvent('home.index', 'recommended-watches', {'articleId': $(this).data('article-id')});" class="article-item block-item rcard" data-article-id="27696090" data-manufacturer="Rolex">
    2. Morceler des informations entre des balises span

    Plusieurs balises <span> avec plusieurs informations distinctes dans une balise "a class="product-item-link""

    <a class="product-item-link" href="https://www.timeshop24.fr/ingersoll-i11 ... alina.html">
    <span>Ingersoll</span>
    <span>The Catalina Automatique 44mm</span>
    <span>I11802</span>
    </a>
    Lorsque je fais une get_text dans la balise "a class="product-item-link"", j'extraie toutes les informations sans pouvoir les séparer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    marque = i.find("a", {"class":"product-item-link"}).get_text()
    Ce code me donne : "IngersollThe Shelby Automatique 44mmI10901B" et j'aurais voulu pouvoir faire un code pour extraire "Ingersoll" puis "The Shelby Automatique 44mm" puis "I10901B"

    Je sais pouvoir compter sur vous, encore merci.

    Damien

  2. #2
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 322
    Par défaut
    bonjour

    Tu débutes ? tout ceci est la base et est dans la doc ...

    1)
    récupérer un attribut est très très simple, on trouve des exemples dans toutes les doc (par exemple src d'une balise A est dans 9 tutos sur 10)
    valeur = balise["attribut"].

    2)
    Plusieurs solutions
    1) depuis ton code :
    Ta variable marque est un élément beautifulsoup, donc rien ne t'empêche de (re)faire une recherche depuis cet élément for span in marque.find_all("SPAN"):...
    2) Tu peux aussi faire directement le "find all", type: for span in html.select_all("a.product-item-link span")

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2023
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2023
    Messages : 33
    Par défaut
    Salut Papajoker,

    1. J'ai vraiment pas de chance ou je dois être vraiment très débile (on peut facilement opter pour la deuxième solution je pense) car j'ai passé approx 8h sur ce point et je n'y suis jamais arrivé. J'ai du sans doute lire toutes les docs à hauteur de 1/10 qui n'avait pas l'info ou que je n'ai pas su la saisir, la comprendre. Bref, pas plus grave que cela, je vais abandonner la chose car comme disait JJG : "parce que parfois tout donner n'est pas forcément suffire"

    2. j'ai essayé ce que tu as préconisé et vais sans doute laisser maturer durant ce long week-end car je n'ai pas réussi à chaud à faire

    Merci d'avoir pris le temps de répondre à mon message.

    Damien

    Citation Envoyé par papajoker Voir le message
    bonjour

    Tu débutes ? tout ceci est la base et est dans la doc ...

    1)
    récupérer un attribut est très très simple, on trouve des exemples dans toutes les doc (par exemple src d'une balise A est dans 9 tutos sur 10)
    valeur = balise["attribut"].

    2)
    Plusieurs solutions
    1) depuis ton code :
    Ta variable marque est un élément beautifulsoup, donc rien ne t'empêche de (re)faire une recherche depuis cet élément for span in marque.find_all("SPAN"):...
    2) Tu peux aussi faire directement le "find all", type: for span in html.select_all("a.product-item-link span")

  4. #4
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 322
    Par défaut
    Citation Envoyé par damienvialla Voir le message
    1. j'ai passé approx 8h sur ce point et je n'y suis jamais arrivé... je vais abandonner la chose
    ? car c'est pourtant très simple. Lorsque l'on débute il faut écrire un petit srcipt pour tester rapidement une seule chose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    from bs4 import BeautifulSoup
     
    html = '''
      <div>
        <a data-manufacturer="Rolex" truc="machin">...</a>
      </div>
    '''
    soup = BeautifulSoup(html, "html.parser")
    tag = soup.find("a")
    if tag:
        print("attribut `truc` : ", tag["truc"])
        print("attribut `marque` : ", tag["data-manufacturer"])

    Citation Envoyé par damienvialla Voir le message
    2. car je n'ai pas réussi à chaud à faire
    Ici aussi, il faut faire des tests le plus simple possible. Comme dit plus haut, il y a 36 façons de faire, c'est selon tes préférences, tes besoins particuliers

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    from bs4 import BeautifulSoup
     
    html = '''
      <a class="product-item-link">
        <span>a</span>
        <span>b</span>
        <span>c</span>
      </a>
    '''
    soup = BeautifulSoup(html, "html.parser")
    tag = soup.find("a", {"class": "product-item-link"})
    if tag:
        for span in tag.find_all("span"):
            print("span :", span.text)
     
     
    tag = soup.find("a")
    if tag:
        a, b, c = tag.find_all("span")
        print("spans 1 :", a, b, c)
     
     
    tags = soup.select("a.product-item-link span")
    if tags:
        print("spans :", tags)
     
    a, b, c = (e..get_text() for e in soup.select("a.product-item-link span"))
    if tags:
        print("spans :", a, b, c)

Discussions similaires

  1. Rechercher un fichier dans une library via un HTML Form WebPart
    Par Gwyom dans le forum Développement Sharepoint
    Réponses: 2
    Dernier message: 17/04/2013, 09h35
  2. recherche d'informations dans des objets de genbank
    Par Jasmine80 dans le forum Bioinformatique
    Réponses: 2
    Dernier message: 05/03/2007, 16h20
  3. Recherche d'infos dans une bd via textbox
    Par lordgodgiven dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 10/09/2006, 17h59
  4. Recherches d'informations dans un recordset
    Par the_6L20 dans le forum Access
    Réponses: 3
    Dernier message: 14/08/2006, 14h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo