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 de scraping sur un texte d'une page web


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 de scraping sur un texte d'une page web
    Bonjour à vous,

    je fais appel à vous car je n'arrive pas à trouver une solution à mon problème malgré plusieurs jours de tentative.

    J'essaie de scraper une page web (https://aviation-safety.net/wikibase/299753) dans laquelle je desire récupérer le texte ATSB Ref 202001462 (voir le bout HTML de la page 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
    39
    40
     
    <!-- startrecord -->
     
    <table>
    <tbody><tr><td class="caption">Date:</td><td class="caption">30-MAR-2020</td></tr>
    <tr><td class="caption">Time:</td><td class="desc"></td></tr> 
    <tr><td class="caption" valign="bottom">Type:</td><td class="desc">DJI Phantom 4 PRO</td></tr>
    <tr><td class="caption">Owner/operator:</td><td class="desc"></td></tr>
    <tr><td class="caption">Registration:</td><td class="desc"> </td></tr>
    <tr><td class="caption">MSN:</td><td class="desc"> </td></tr>
    <tr><td class="caption">Fatalities:</td><td class="desc">Fatalities: 0 / Occupants: 0</td></tr>
    <tr><td class="caption">Other fatalities:</td><td class="desc">0</td></tr> 
     
    <tr><td class="caption">Aircraft damage:</td><td class="desc"> Substantial</td></tr>
    <tr><td class="caption">Category:</td><td class="desc">Accident</td></tr> 
     
    <tr><td valign="top" class="caption">Location:</td><td class="desc">Georges River National Park, NSW - 
    	<img src="/database/country/flags_15/VH.gif"> &nbsp; <a href="/wikibase/dblist.php?Country=VH">Australia</a>
     
    	 </td></tr>
    <tr><td class="caption">Phase:</td><td class="desc"> Unknown</td></tr>
    <tr><td class="caption">Nature:</td><td class="desc">Unknown</td></tr>
    <tr><td class="caption">Departure airport:</td><td class="desc"></td></tr>
    <tr><td class="caption"><nobr>Destination airport:</nobr></td><td class="desc"></td></tr>
     
     
    <tr><td class="caption">Confidence Rating:</td><td class="desc"><img src="/wikibase/CR2.svg" width="15" height="15"> Information verified through data from accident investigation authorities</td></tr>
    </tbody></table>
     
     
     
     
    <span class="caption">Narrative:</span><br><span lang="en-US">During flying training, the remotely piloted aircraft (RPA) banked uncommanded and collided with terrain resulting in substantial damage. It was later determined the forward port rotor had separated from the RPA.</span><br>
    <p></p><div class="captionhr">Sources:</div> <br>
     
    ATSB Ref 202001462 <br><p></p><p>
    <!-- endrecord -->
     
    <br>
    </p>
    voici mon code ci-dessous dans lequel j'aurais tout essayé (enfin je pense depuis 3 jours) sans succès.(attention ceci est le dernier essaie en date dont je sais qu'il retourne une erreur. je rappelle que j'essaie de retirer le texte de cette page ATSB Ref 202001462 et que celui-ci n'est pas le même texte dans une autre page de ce même site.
    Il semble que ce texte n'est pas dans encadré par un tag ce qui me surprend d'ailleurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    import requests
    from bs4 import BeautifulSoup
     
    def parse_occurence():
        r = requests.get("https://aviation-safety.net/wikibase/299753")
        soup = BeautifulSoup(r.content, "html.parser")
        sources_text = soup.find_next("div", class_="captionhr").findNext("br").text
        print(sources_text)
    parse_occurence()

    Pourriez vous m'aider a solutionner mon problème s'il vous plait ?
    Par avance merci pour votre aide.

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 964
    Par défaut
    A priori le texte que tu cherches se trouve juste avant le commentaire

    Non testé mais tu devrait pouvoir trouver ce commentaire puis la texte avec quelque chose ressemblant à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    comments = soup.find_all(lambda tag: isinstance(tag, Comment) and "endrecord" in tag.text )
    text_node = comments[0].previous_element()

  3. #3
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Solution de débutant :
    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
     
    url1 = "https://aviation-safety.net/wikibase/299753"
     
    with requests.Session() as session:
        post = session.post(url1)
        contenu1 = post.text
    # print(contenu1)
     
    soup1 = BeautifulSoup(contenu1, 'html.parser')
     
    tab1 = soup1.find_all('table')
     
    for el1 in tab1:
        el2 = el1.find_all("td")
        # print(el2)
        for el3 in el2:
            print(el3.text)

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 964
    Par défaut
    marco056,

    C'est surtout une solution qui ne répond pas à la demande
    L'élément recherché n'est pas dans une table.

  5. #5
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Citation Envoyé par popo Voir le message
    marco056,

    C'est surtout une solution qui ne répond pas à la demande
    L'élément recherché n'est pas dans une table.
    Désolé...

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Bonjour,

    Avec le module lxml,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    from lxml import html
     
    def get_line(content):
        tree = html.fromstring(content)
        line = tree.xpath('//text()[contains(.,"ATSB Ref")]')
        if line:
            return line[0].strip()
        return ""
    le paramètre content est le contenu sous forme de chaîne de caractères du code HTML.

  7. #7
    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 fred1599 Voir le message
    Bonjour,

    Avec le module lxml,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    from lxml import html
     
    def get_line(content):
        tree = html.fromstring(content)
        line = tree.xpath('//text()[contains(.,"ATSB Ref")]')
        if line:
            return line[0].strip()
        return ""
    le paramètre content est le contenu sous forme de chaîne de caractères du code HTML.
    merci pour cette réponse @fred1599, cependant je n'arrive pas a la tester ! comment puis-je vérifier son bon fonctionnement ?

    En effet la réponse de @marco056 n'est pas satisfaisante car ressort bien les éléments de la page mais pas celui que je recherche particulierement.

    @popo, je comprends pas ou tu definis la variable Comments dans le bout de code tag: isinstance(tag, Comment)?

  8. #8
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Citation Envoyé par K2carca Voir le message
    merci pour cette réponse @fred1599, cependant je n'arrive pas a la tester ! comment puis-je vérifier son bon fonctionnement ?
    En installant le module,


  9. #9
    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 fred1599 Voir le message
    En installant le module,

    il est déjà installé..

  10. #10
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 964
    Par défaut
    Citation Envoyé par K2carca Voir le message
    @popo, je comprends pas ou tu definis la variable Comments dans le bout de code tag: isinstance(tag, Comment)?
    Lorsqu'on utilise une librairie, la moindre des choses est d'en consulter la documentation.
    Il te manque simplement l'import
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from bs4 import Comment

  11. #11
    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 popo Voir le message
    Lorsqu'on utilise une librairie, la moindre des choses est d'en consulter la documentation.
    Il te manque simplement l'import
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from bs4 import Comment
    Merci popo pour cette information. et du coup, je suppose que je trouve la documentation de chaque librairie dans python.org?

  12. #12
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 964
    Par défaut
    Citation Envoyé par K2carca Voir le message
    Merci popo pour cette information. et du coup, je suppose que je trouve la documentation de chaque librairie dans python.org?
    Non, tu prend tes petites mimines et tu tape dans Google le nom de ta librairie suivi de "documentation". Ici c'est BeautifulSoup donc tu va dans Google et tu recherche "BeautifulSoup documentation" et au miracle la premier résultat est la documentation officielle de cette librairie.

  13. #13
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Eh bien on pourrait commencer par indiquer l'erreur et la manière dont tu exécutes la fonction...

  14. #14
    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 fred1599 Voir le message
    Eh bien on pourrait commencer par indiquer l'erreur et la manière dont tu exécutes la fonction...
    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
     
    import requests
    from bs4 import BeautifulSoup
    from lxml import html
    import re
     
    def parse_occurence():
        r = requests.get("https://aviation-safety.net/wikibase/299753")
        soup = BeautifulSoup(r.content, "html.parser")
        src = soup.find("div", class_="innertube")
     
     
        info = soup.find("table").text
     
        narrative = soup.find("span", class_="caption").text
     
        synopsis = src.select_one("span[lang='en-US']").text
     
        sources = soup.find("div", class_="captionhr").text
        #ref_sources = soup.find("div", class_="captionhr")
        comments = soup.find_all(lambda tag: isinstance(tag, Comments) and "endrecord" in tag.text)
        ref_sources = comments[0].previous_element()
     
        # Retourne les infos des occurrences
        print(info)
        # Retourne la description de l'occurence
        print(narrative, synopsis)
        # Retourne la source de l'occurence
        print(sources, ref_sources)
     
     
    #parse_occurence()
    def get_line(content):
        tree = html.fromstring(content)
        line = tree.xpath('//text()[contains(.,"ATSB Ref")]')
        if line:
            return line[0].strip()
        return ""
     
    get_line()
    voici le code dans lequel j'ai insérer ta fonction.

    et voici le message d'erreur

    Traceback (most recent call last):
    File "/Users/karimbounaji/PycharmProjects/asn_db/scrap_page_occ.py", line 39, in <module>
    get_line()
    TypeError: get_line() missing 1 required positional argument: 'content'

    désolé mais j'ai que très peu d'experience en python. J'apprends et j'avoue qu'un peu d'explication me fait pas mal. Surtout votre aide, pour mieux appréhender ce langage.

  15. #15
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Citation Envoyé par K2carca Voir le message
    voici le message d'erreur

    Traceback (most recent call last):
    File "/Users/karimbounaji/PycharmProjects/asn_db/scrap_page_occ.py", line 39, in <module>
    get_line()
    TypeError: get_line() missing 1 required positional argument: 'content'
    Ça indique que la fonction get_line prend un paramètre. Tu n'en as pas mis (parenthèses vides), il faut donc y ajouter le contenu html reçu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    line = get_line(my_html_content)
    Ci-dessus c'est un exemple, il faut adapter à ton code.

  16. #16
    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 fred1599 Voir le message
    Ça indique que la fonction get_line prend un paramètre. Tu n'en as pas mis (parenthèses vides), il faut donc y ajouter le contenu html reçu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    line = get_line(my_html_content)
    Ci-dessus c'est un exemple, il faut adapter à ton code.

    Pardon mais j'ai du mal a saisir a quel endroit je dois mettre la ligne que vous me donnez, et la correspondance pour vous "my html content".
    En regardant mon code je ne vois pas a quel endroit j'ai l'equivalent de la variable du contenu sinon ma variable soup qui est egale a (r.content)

  17. #17
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import requests
    from lxml import html
     
     
    def get_line(content):
        tree = html.fromstring(content)
        line = tree.xpath('//text()[contains(.,"ATSB Ref")]')
        if line:
            return line[0].strip()
        return ""
     
     
    r = requests.get("https://aviation-safety.net/wikibase/299753")
    print(get_line(r.content))

  18. #18
    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 fred1599 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import requests
    from lxml import html
     
     
    def get_line(content):
        tree = html.fromstring(content)
        line = tree.xpath('//text()[contains(.,"ATSB Ref")]')
        if line:
            return line[0].strip()
        return ""
     
     
    r = requests.get("https://aviation-safety.net/wikibase/299753")
    print(get_line(r.content))
    d'accord je comprends mieux maintenant d'ou il prends l'information.
    je suppose que c'est la commande text()[contains(.,"ATSB Ref3")] dans line = tree.xpath('//text()[contains(.,"ATSB Ref")]')

    Merci pour cet élément de réponse.

    est-il possible de mettre a la place de ATSB Ref qui est donc un str et remplacer par href comme dans le tag ci dessous ? car parfois dans certaine page j'ai cette balise en lieu et place de ATSB Ref
    <a href="https://southfront.org/libyan-national-army-shot-down-another-turkish-bayraktar-tb2-combat-drone-photo/" target="_blank">https://southfront.org/libyan-national-army-shot-down-another-turkish-bayraktar-tb2-combat-drone-photo/</a>

    je veux dire par la avec cette ligne de commande peut on dire "regarde s'il y a ATSB ref ou autre chose" ?

  19. #19
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Citation Envoyé par K2carca Voir le message
    est-il possible de mettre a la place de ATSB Ref qui est donc un str et remplacer par href comme dans le tag ci dessous ? car parfois dans certaine page j'ai cette balise en lieu et place de ATSB Ref
    <a href="https://southfront.org/libyan-national-army-shot-down-another-turkish-bayraktar-tb2-combat-drone-photo/" target="_blank">https://southfront.org/libyan-national-army-shot-down-another-turkish-bayraktar-tb2-combat-drone-photo/</a>

    je veux dire par la avec cette ligne de commande peut on dire "regarde s'il y a ATSB ref ou autre chose" ?
    Il n'y a que les exemples, le format de ton HTML qui pourront permettre de faire des tests par la suite avec cette fonction.

    Dans le cas présent, on recherche un texte... mais testes, vérifie si c'est fonctionnel et si non, présente tes difficultés sur le forum.

  20. #20
    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 fred1599 Voir le message
    Il n'y a que les exemples, le format de ton HTML qui pourront permettre de faire des tests par la suite avec cette fonction.

    Dans le cas présent, on recherche un texte... mais testes, vérifie si c'est fonctionnel et si non, présente tes difficultés sur le forum.
    Merci pour la réponse.
    j'ai implémenté avec une boucle if mon code afin que mon programme me sorte le texte si la fonction que tu m'as fourni retourne le texte sinon autre chose si la fonction retourne "".
    Il ne me restera qu'a traiter le cas ou il n'y rien dans tous les cas. Pour ca je pense que je vais m'en sortir (enfin j'espère )

    voici mon code (de débutant) avec votre contribution:

    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
     
    import requests
    from bs4 import BeautifulSoup
    from lxml import html
     
     
    # Récupère la reference de la source si ATSB sinon retourne vide
    def get_line(sources):
        tree = html.fromstring(sources)
        line = tree.xpath('//text()[contains(.,"ATSB Ref")]')
        if line:
            return line[0].strip()
        return ""
     
     
    # Parse / Recupere les informations de la page
    def parse_occurence():
        r = requests.get("https://aviation-safety.net/wikibase/234768")
        soup = BeautifulSoup(r.content, "html.parser")
        src = soup.find("div", class_="innertube")
     
        info = soup.find("table").text
     
        narrative = soup.find("span", class_="caption").text  # récupère Narrative de la page 
     
        synopsis = src.select_one("span[lang='en-US']").text  # récupère le synopsis
     
        sources = soup.find("div", class_="captionhr").text  # récupère le texte Source: de la page
     
    # Récupère la référence de la source a l'aide de la fonction get line si ATSB et sinon directement si autre
        sources_ref = None
        result = (get_line(r.content))
     
        if result:
            sources_ref = result
        else:
            result = soup.find("div", class_="captionhr").findNext("a").text
            if result:
                sources_ref = result
     
        # Imprime les infos des occurrences
        print(info)
        # Imprime la description de l'occurence
        print(narrative, synopsis)
        # Imprime la source de l'occurence
        print(sources, sources_ref)
     
     
    parse_occurence()
    pour information si vous voulez tester, changez le numero a la fin de l'url https://aviation-safety.net/wikibase/234768
    par exemple 300768

    enfin, presque car maintenant il va falloir que j'integre une fonction qui boucle ce code 1465 fois environ.... (pour chaque url que je trouve )

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/01/2014, 04h19
  2. Afficher le texte d'une page web sur SmartWatch
    Par Ceubex dans le forum Android
    Réponses: 1
    Dernier message: 13/01/2013, 21h11
  3. Cacher du texte d' une page web
    Par WELCOMSMAIL dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 26/10/2006, 11h02
  4. Action sur le serveur via une page web
    Par raphxyz dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 26/08/2006, 18h07
  5. Comment Appuyer sur le bouton d'une page web...?
    Par Mayti4 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 23/01/2005, 14h07

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