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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2021
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Roumanie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2021
    Messages : 24
    Par défaut Python: Comment ignorer la plupart des balises html et sélectionner uniquement le texte (peut-être avec Regex?
    salut, j'ai quelques fichiers html avec des balises telles que <div id =" "> </div>, <span class ..>, <dt>, <br>, etc.

    Mais, aussi, j'ai ces 4 balises spéciales.

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <title> J'adore les films </title>
     
    <h1 class =" den_articol "itemprop =" name "> Les hauteurs des espaces éternels </h1>
     
    <p class =" text_obisnuit "> À la fin du film <em> je le vois bien différent </em> qu'il était avant. </p>
     
    <p class =" text_obisnuit2 "> Allez, apportez-moi du café. </p>

    **LE PROBLÈME:**

    Avec mon code Python, je veux sélectionner le texte UNIQUEMENT à partir de ces 4 balises et en ignorer les autres. Et je dois garder ces balises intactes. Donc, j'écris les délimiteurs comme ci-dessous:

    Vous avez mon script complet HERE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        extensie_fisier = ".html"
     
        lista_cale_fisiere = []
        delimitatori_text = [['<title','</title>'], ['<h1 class="den_articol" itemprop="name', '</h1>'], ['<p class="text_obisnuit', '</p>'], ['<span class="text', '</span>']]
    Ma méthode fonctionne, la traduction est correcte sur ces balises html. Donc, la sélection est bonne. Mais a quelques petites erreurs. De nombreuses balises changent. Certains espaces vides se produisent après l'exécution du code. </span> devient </ SPAN> ou <em> devient </ EM>. Idem pour </ li> ou </ ol>.

    et s'il y avait une solution plus simple? Je me demande si je ne pourrais pas faciliter l'opération avec un REGEX. Par exemple ceci REGEX (<([^>]+)>.*?) sélectionnera toutes les balises html possibles, et mon code Python sélectionnera plus facilement le texte et le traduira. Je pense donc qu'il peut ignorer les balises html.

    Le problème dans ce cas est que je ne sais pas comment GARDER les balises html après avoir exécuté le code Python avec ce Regex. Et je ne sais pas où insérer cette expression régulière dans mon code.

    Encore une fois, vous avez mon script complet HERE

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Tu peux peut-être trouvé ton bonheur avec BeautifulSoup ?

  3. #3
    Membre averti
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2021
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Roumanie

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2021
    Messages : 24
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    Bonjour,

    Tu peux peut-être trouvé ton bonheur avec BeautifulSoup ?
    Je ne sais pas comment travailler avec BeautifulSoup. J'entends maintenant pour la première fois, je suis un débutant

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Citation Envoyé par Melcus Voir le message
    je suis un débutant
    Vous devez faire la différence entre "est-ce que le texte extrait est correct" et "est-ce que sa traduction avec google translate reste correcte".

    Après débutant ou pas, vous ne demandez pas de l'aide pour faire un exercice ou comprendre un concept du langage mais pour la mise au point de la fonctionnalité d'un programme.
    Sans vous embarquer à une description technique, un exemple qui permet de reproduire le problème constaté avec la fonctionnalité en question serait bien utile...

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

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Melcus Voir le message
    **LE PROBLÈME:**

    Avec mon code Python, je veux sélectionner le texte UNIQUEMENT à partir de ces 4 balises et en ignorer les autres.
    Le vrai problème, c'est que "h1" (ou même "h") c'est une balise, mais "class=" ce n'est pas une balise, c'est une caractéristique. Et cette caractéristique peut évoluer. Si tu te focalises dessus au détail près, tu seras marron dès que la balise évoluera un tant soit peu.

    Un autre souci avec la regex, c'est que la regex est généralement gloutonne. Si tu lui passes un match, elle cherchera la string maximale qui correspond. Imaginons par exemple que tu veuilles chercher "<H1 ......>" tu te dis "je supprime "ce qui commence par <H puis qui contient du caractère et qui se termine par >". Et là, tu ne récupères plus rien parce que dans la chaine "<H1 ...>texte à garder</H1>" la seconde balise </H1>" se termine aussi par un ">". Je crois qu'il y a des options pour lui dire de se contenter du minimim mais je ne les connais pas.

    Tu peux tenter un truc en commençant par supprimer le "</H1>" final ce qui permet alors de supprimer le "<H1 ......>" du début sans perdre le texte...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/usr/bin/env python3
     
    data='<h1 class =" den_articol "itemprop =" name "> Les hauteurs des espaces éternels </h1>'
     
    import re
    print(data)
    tabBalises=(
    	("/[hH][0-9].{0,}", "[hH][0-9].{0,}"),
    )
     
    for balise in tabBalises:
    	for b in balise:
    		data=re.sub(r"<%s>" % b, "", data)
    print(data)
    ... mais bon, filtrer un texte aussi fluctuant ce ne sera pas évident.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Je crois qu'il y a des options pour lui dire de se contenter du minimim mais je ne les connais pas.
    Bonjour,

    *?, +?, ??

    Les qualificateurs '*', '+' et '?' sont tous greedy (gourmands) ; ils valident autant de texte que possible. Parfois ce comportement n'est pas désiré ; si l'expression rationnelle <.*> est testée avec la chaîne '<a> b <c>', cela correspondra à la chaîne entière, et non juste à '<a>'. Ajouter ? derrière le qualificateur lui fait réaliser l'opération de façon non-greedy (ou minimal) ; le moins de caractères possibles seront validés. Utiliser l'expression rationnelle <.*?> validera uniquement '<a>'.
    Sinon, comme dit par @LeNarvalo, faudrait surement regarder du coté du module BeautifulSoup. (je ne l'ai jamais étudié, mais si je devais parcourir du Htlm, je regarderai en premier lieu de ce coté)

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 218
    Par défaut
    hello,

    voici un exemple pour "parser" du html avec beautifulsoup :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # coding: utf-8
    from bs4 import BeautifulSoup
    html_doc = """
    <html>
     <title> J'adore les films </title>
    <h1 class =" den_articol " itemprop =" name "> Les hauteurs des espaces éternels </h1>
    <p class =" text_obisnuit "> À la fin du film <em> je le vois bien différent </em> qu'il était avant. </p>
    <p class =" text_obisnuit2 "> Allez, apportez-moi du café. </p>
    </html>
    """
    soup = BeautifulSoup(html_doc)
    print(soup.find('title').text)
    print(soup.find('h1', class_='den_articol').text)
    print(soup.find('p', class_='text_obisnuit').text)
    Résultat :
    J'adore les films
    Les hauteurs des espaces éternels
    À la fin du film je le vois bien différent qu'il était avant.
    Ami calmant, J.P

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/05/2011, 12h14
  2. [XML] [Débutant]Comment ajouter des balise html dans un fichier XML
    Par pierrot10 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 18/09/2010, 14h36
  3. Insérer des balises HTML dans une zone de texte
    Par selinav dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 16/12/2008, 20h52
  4. Inserer des balise html dans une zone de text du rapport
    Par jacky2677 dans le forum iReport
    Réponses: 1
    Dernier message: 12/08/2008, 12h08
  5. faire passer des balise html d'un XML vers un XLS
    Par shaftJackson dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 26/04/2006, 16h07

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