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 scraping page web et table


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 150
    Par défaut problème scraping page web et table
    Bonjour à toutes et tous,

    je débute sur python et dans le cadre de mon projet, je souhaite récupérer les occurrences de plusieurs page web d'un site spécifique.
    A l'inspection de la page, j'arrive a identifier les tags qui m’intéressent, et dans un premier temps, j'essai, pas à pas, de récupérer la totalité.

    Mon souci est que soit je récupère une erreur d'attribut, soit un résultat vide comme ceci [], et je ne comprends pas la raison.

    a terme, je souhaite récupérer pour chaque page de chaque année les occurrences, et plus précisément celles des types "UAVs"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    import requests
    from bs4 import BeautifulSoup as bs
    url = "https://aviation-safety.net/wikibase/dblist.php?Year=2023"
    page = requests.get(url)
    soup = bs(page.content, 'html.parser')
     
    tables = soup.find_all("tr", class_="list")
    print(tables)
    pourriez vous s'il vous plait m'aider et un peu m'expliquer la raison pour laquelle j'ai comme retour [] alors que la page est pleine ?

    par avance merci pour votre réponse.
    pythonnement

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 224
    Par défaut
    Hello,
    la requête sur ton url renvoie :
    Sorry, something went wrong. You can contact us via info@aviation-safety.net, should the problem persist.
    le serveur doit détecter que c'est une requête qui provient d'un système automatique et interdit l'accès : il faut peut-être rajouter des paramètres à la requête pour faire croire que celle-ci provient d'un navigateur ou alors utiliser un module comme selenium qui pilote un navigateur.
    tu peux essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'}
    url = "https://aviation-safety.net/wikibase/dblist.php?Year=2023"
    page = requests.get(url,headers=headers)
    Ami calmant, J.P

  3. #3
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    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 323
    Par défaut
    bonjour
    Citation Envoyé par jurassic pork Voir le message
    e serveur doit détecter que
    Le plus simple pour voir s'il y a restriction, est de faire une requête curl dans son terminal et afficher le résultat brut de la requete python (site interdit à certaines signatures ?)
    Ici, utiliser requests à la place du standard urllib


    c'est une requête qui provient d'un système automatique et interdit l'accès : il faut ...

    Si je mets un panneau chez moi "défense d'entrer" c'est pour tout le monde !!! même ceux qui arrivent à rentrer avec un bulldozer.
    Après avoir écrit "c'est interdit", dire à une personne qu'elle peut contourner/forcer avec un outil, cela ne te choque pas ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 150
    Par défaut
    Citation Envoyé par papajoker Voir le message
    bonjour
    Le plus simple pour voir s'il y a restriction, est de faire une requête curl dans son terminal et afficher le résultat brut de la requete python (site interdit à certaines signatures ?)
    Ici, utiliser requests à la place du standard urllib




    Si je mets un panneau chez moi "défense d'entrer" c'est pour tout le monde !!! même ceux qui arrivent à rentrer avec un bulldozer.
    Après avoir écrit "c'est interdit", dire à une personne qu'elle peut contourner/forcer avec un outil, cela ne te choque pas ?
    @papajoker, je comprends tout a fait et aussi que si le concepteur de ce site a marqué "sorry, something went wrong...." c'est que potentiellement il ne souhaite pas être responsable de l'utilisation qu'il peut être fait de la database.

    Autrement je vous remercie pour votre réponse. pourriez-vous m'en dire plus sur le roll et weird ? ou puis-je/pourrais-je les placer dans mon code s'il vous plait?

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 150
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    Hello,
    la requête sur ton url renvoie :

    le serveur doit détecter que c'est une requête qui provient d'un système automatique et interdit l'accès : il faut peut-être rajouter des paramètres à la requête pour faire croire que celle-ci provient d'un navigateur ou alors utiliser un module comme selenium qui pilote un navigateur.
    tu peux essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'}
    url = "https://aviation-safety.net/wikibase/dblist.php?Year=2023"
    page = requests.get(url,headers=headers)
    Ami calmant, J.P
    Merci pour vôtre réponse.
    En effet, après avoir inséré votre proposition de solution, et ajouter un traitement d'erreur (AttributeError), voici mon code en retour.
    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
     
    import requests
    from bs4 import BeautifulSoup as bs
     
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36'}
    url = "https://aviation-safety.net/wikibase/dblist.php?Year=2023"
    page = requests.get(url, headers=headers)
    soup = bs(page.content, 'html.parser')
    tables = soup.find_all("tr", class_="list")
     
    #Boucle pour chaque ligne
    for row in tables:
        columns = row.find_all("td", class_="list")
        for column in columns:
            #Gestion de l'exception AttributeError
            if column.attribute:
                print("") #cas si AttributeError
            else:
                print(column.text) #cas si ok
    maintenant, ma prochaine évolution va consister à ne selectionner que les colonnes de 1 à 4 et la 6ème et aussi de répéter l'operation pour chaque pages et année existante...

Discussions similaires

  1. Problème affichage page web
    Par pitite dans le forum Zend Framework
    Réponses: 1
    Dernier message: 20/03/2013, 15h20
  2. Réponses: 2
    Dernier message: 31/01/2009, 17h44
  3. [web] Problème affichage page web
    Par benji2642 dans le forum MATLAB
    Réponses: 2
    Dernier message: 12/04/2007, 02h00
  4. Problème affichage page web html ou htm
    Par metmac1 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 08/03/2007, 21h15
  5. Réponses: 3
    Dernier message: 04/11/2006, 08h23

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