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 :

importer des données d'un site avec BeautifulSoup


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Consultant Marketing
    Inscrit en
    Mars 2016
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant Marketing
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2016
    Messages : 285
    Points : 57
    Points
    57
    Par défaut importer des données d'un site avec BeautifulSoup
    Bonjour,

    Je voudrais récupérer des données d'un site et je pense avoir tout bien indiqué et il me donne aucun résultat, quand je fais un il ne donne rien avez vous une idée ?
    Mon print(page) me donne bien un résultat "200".

    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
     
    from bs4 import BeautifulSoup
    import requests
     
    url = "https://www.pararius.com/apartments/amsterdam?ac=1"
    page = requests.get(url)
    # print(page)
     
    soup = BeautifulSoup(page.content, 'html.parser')
    lists = soup.find_all('section', class_="listing-search-item")
     
    for list in lists:
        title = list.find('a', class_="listing-search-item__link--title")
        location = list.find('div', class_="listing-search-item__location")
        price = list.find('span', class_="listing-search-item__price")
        area = list.find('span', class_="illustrated-features__description")
        info = [title, location, price, area]
        print(info)

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Récupérer les données d'un site Web se fait via une requête HTTP (dans votre code, c'est requests.get qui fait ce boulot). On a alors une chaine de caractères qui est sous la forme d'un document HTML (si on n'a pas demandé autre chose). C'est pour chercher des informations dans ce document que BS intervient.

    Et donc si la boucle for ne passe pas par les "print", on peut penser qu'à priori lists est vide. Or c'est ce que retourne soup.find_all('section', class_="listing-search-item") et... c'est là qu'on regarde le contenu du HTML (ici page.content) pour vérifier que ce qu'on cherche existe et qu'on réfléchit pourquoi ce n'est pas là.

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

  3. #3
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    Hello,
    si ton site utilise des scripts javascript pour générer les données affichées (pages dynamiques) cela ne fonctionnera pas. Un requests.get va chercher le code source de la page, si il y a des scripts dedans pour générer les données ce sont les navigateurs qui vont exécuter ces scripts et alors afficher les données. Dans ce cas il faut utiliser une bibliothèque comme selenium qui pilotera un navigateur et pourra extraire les données affichées dans le navigateur.
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  4. #4
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 104
    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 104
    Points : 4 454
    Points
    4 454
    Par défaut
    bonjour

    1) Mais pourquoi ne pas faire un print() après ton get ? La moindre des choses est de regarder ce que tu vas avoir comme code html
    2) Du n'importe quoi dans tes find(), la moindre des choses, c'est de lire le code html pour savoir ce qu'il faut chercher. Tu inventes des classes à chercher, et recherche de mauvais tags.
    $moi= ( !== ) ? : ;

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 126
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 126
    Points : 1 636
    Points
    1 636
    Par défaut
    a noter aussi que tu écrases info à chaque tour de boucle (mais c'est peut-être normal pour le moment)

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Points : 1 876
    Points
    1 876
    Par défaut
    Citation Envoyé par papajoker Voir le message
    1) Mais pourquoi ne pas faire un print() après ton get ? La moindre des choses est de regarder ce que tu vas avoir comme code html
    Ou mieux encore, cracher le code HTML reçu dans un log, c'est plus facile à examiner.

    Et attention au shadowing de mots-clé réservés comme list...

Discussions similaires

  1. [AC-2007] Importer des données dans Access via ODBC en spécifiant avec critères
    Par zamalos dans le forum VBA Access
    Réponses: 1
    Dernier message: 23/12/2011, 12h22
  2. [XL-2003] Importer des données d'un site
    Par zangaloni dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/07/2011, 11h52
  3. Réponses: 25
    Dernier message: 26/04/2011, 13h58
  4. importer des données sql server avec C#
    Par solitude dans le forum C#
    Réponses: 7
    Dernier message: 10/08/2010, 09h42
  5. Importer des données dans sql server avec DELPHI ???
    Par moutanakid dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/08/2004, 17h22

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