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 :

Problème d'itération beautifulSoup


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Janvier 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Janvier 2019
    Messages : 7
    Par défaut Problème d'itération beautifulSoup
    bonjour à tous

    J'espere pour commencer etre dans la bonne section

    Je découvre les joies du langage Python afin de développer mon site Web

    Après avoir vu de nombreux tutos ainsi que les différentes documentations concernant BeautifulSoup, j'arrive à récupérer les infos souhaitées sur la 1ere ligne du tableau seulement. J'ai bien compris que pour avoir toutes les lignes du tableau, il faut faire une itération avec "for". C'est la où je bloque.

    La 1ere ligne est bien trouvée mais à la 2eme, la valeur est "none".

    Voici mon code ci-dessous :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    import requests
    from bs4 import BeautifulSoup
    import pandas as pd
    import urllib3
     
     
    url = 'https://www.futbin.com/21/players'
    response = requests.get(url)
    if response.ok:
        soup = BeautifulSoup(response.text,'lxml')
        table = soup.find('tbody')
        tds = soup.findAll('td')
        for td in tds :
            imgPlayer = td.find('img', class_='player_img')
            imgPlayerLink = imgPlayer['data-original']
            name = td.find('a', class_='player_name_players_table')
            detail = td.find('span', class_= 'players_club_nation')
            club = detail.find('img')
            clubLink = club['src']
            pays = club.find_next('img')
            paysLink = pays['src']
            league = pays.find_next('img')
            leagueLink = league['src']
            note = name.find_next('td')
            position = note.find_next('td')
            version = position.find_next('td')
            prix = version.find_next('td')
     
            print(imgPlayerLink)
            print(name.text)
            print(clubLink)
            print(paysLink)
            print(leagueLink)
            print(note.text)
            print(position.text)
            print(version.text)
            print(prix.text)
    J'espère sincèrement que vous pourrez m'aider.

    En attendant une réponse, je vous remercie par avance

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 716
    Par défaut
    Salut,

    Ça veut dire que votre tableau a des cases (TD) qui ne contiennent pas toutes les éléments cherchés (d'où le None).
    Soit vous ignorez ces cases, soit vous examinez la page HTML pour vois si on peut réduire le nombre de cases.

    Citation Envoyé par futforfun Voir le message
    J'ai bien compris que pour avoir toutes les lignes du tableau, il faut faire une itération avec "for". C'est la où je bloque.
    Le problème n'est pas côté Python: la boucle for est parfaite... mais côté sur quoi on boucle t est-ce que le filtre appliqué va remonter que de bonnes informations?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre du Club
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Janvier 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Janvier 2019
    Messages : 7
    Par défaut Problème d'itération beautifulSoup
    Salut,
    Tout d'abord, merci de ta réponse.

    Comme j'ai écrit dans le sujet, je débute et j'ai regardé des tutos a droite et à gauche afin d'arriver a faire ce que j'aimerais.

    Sachant qu'il me prend la 1ere ligne, je pensais que cela fonctionnerait avec une itération

    Comment faire pour ignorer les cases?

    Merci d'avance

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 716
    Par défaut
    Citation Envoyé par futforfun Voir le message
    Comme j'ai écrit dans le sujet, je débute et j'ai regardé des tutos a droite et à gauche afin d'arriver a faire ce que j'aimerais.
    Naviguer dans une page HTML, c'est compliqué pour débuter avec boucles et conditions. Il vaut mieux commencer à faire des exercices avec des entiers, chaines de caractères, ... des données plus faciles à visualiser.

    Et les tutos, c'est pas des recettes de cuisines à recopier mais du temps passé à essayer de faire les exercices proposés en s'habituant aux différents messages d'erreur que Python remonte et en s'appliquant à relire les instructions qu'on a écrit pour comprendre pourquoi çà ne marche pas.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre du Club
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Janvier 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Janvier 2019
    Messages : 7
    Par défaut Problème d'itération beautifulSoup
    On est sur un forum d'entraide non?
    Je demande juste quelle condition dois-je appliquer afin que le boucle continue

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 716
    Par défaut
    Citation Envoyé par futforfun Voir le message
    On est sur un forum d'entraide non?
    Je demande juste quelle condition dois-je appliquer afin que le boucle continue
    Si vous ne savez pas tester si un objet est None ou pas, c'est que vous n'avez pas appris les bases (et lisez un peu les règles avant de postez: vous êtes supposé savoir un peu programmer avant de poster ici sauf à demander de l'aide pour coder des exercices).

    Ceci dit, pour faire ce boulot là, il faut passer un temps non nul à comprendre la structure de la page HTML à analyser. Ce qui n'a rien à voir avec la programmation Python.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre du Club
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Janvier 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Janvier 2019
    Messages : 7
    Par défaut Problème d'itération beautifulSoup
    Merci pour votre aide, j'ai réussi a récupéré les données que je voulais.
    Maintenant j'aimerai l'écrire dans un csv ou json
    Le problème est qu'il m'inscrit seulement la dernière ligne avec la methode 'w'
    Avec la méthode 'a', il m'inscrit bien toutes les lignes mais n'efface pas les précédentes et ce n'est pas ce que je veux
    Voici mon code :
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
              import requests
    from bs4 import BeautifulSoup
    import csv
    import pandas as pd
    import json
    import re
     
     
    for i in range(5):
        url = 'https://www.futbin.com/21/players?page='+ str(i) +'&ps_price=1100-5000&version=gold_rare&sort=likes&order=desc'
        response = requests.get(url)
        if response.ok:
            soup = BeautifulSoup(response.text,'lxml')
            tbody = soup.find('tbody')
            extracted = tbody.findAll('tr', {'class': re.compile('player_tr_\d+')})
            for td in extracted :
                name = td.find('a', class_='player_name_players_table')
                #print(name.text)
                detail = td.find('span', class_= 'players_club_nation')
                if detail:
                    club = detail.find('img')
                clubLink = club['src']
                #print(clubLink)
                pays = club.find_next('img')
                paysLink = pays['src']
                #print(paysLink)
                league = pays.find_next('img')
                leagueLink = league['src']
                #print(leagueLink)
                imgPlayer = td.find('img', class_='player_img')
                if imgPlayer:
                    imgPlayerLink = imgPlayer['data-original']
                #print(imgPlayerLink)
                note = name.find_next('td')
                #print(note.text)
                position = note.find_next('td')
                #print(position.text)
                version = position.find_next('td')
                #print(version.text)
                prix = version.find_next('td')
                #print(prix.text)
     
     
    # data to be written row-wise in csv fil
    players = [
        name.text,
        clubLink, 
        paysLink,
        leagueLink,
        imgPlayerLink,
        note.text,
        position.text,
        version.text,
        prix.text ]
    #print(players)
     
    with open('data.json', 'w') as outfile:
        json.dump(players, outfile)
    Je dois pas être loin de la solution mais je ne trouve pas

    Si quelqu'un voit l'erreur

    Merci d'avance

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 716
    Par défaut
    Citation Envoyé par futforfun Voir le message
    Je dois pas être loin de la solution mais je ne trouve pas
    A la sortie de la boucle, on récupère les valeurs de la dernière itération...

    Et si vous ne maîtrisez pas les constructions de base, les tutos sont là pour vous (et les exercices sont souvent corrigés).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Problème d'itération
    Par quangthi dans le forum GWT et Vaadin
    Réponses: 0
    Dernier message: 18/10/2010, 11h03
  2. Problème d'itération dans mon prog
    Par akabis dans le forum VB.NET
    Réponses: 4
    Dernier message: 01/06/2009, 09h22
  3. problém d'itération sur un resultset
    Par aymen83 dans le forum Langage
    Réponses: 13
    Dernier message: 08/05/2008, 08h53
  4. Problème d'itération avec un vecteur
    Par lovecpp dans le forum SL & STL
    Réponses: 11
    Dernier message: 13/09/2007, 10h37
  5. Problème d'itération dans mon actionListener
    Par Invité dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 02/08/2007, 15h02

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