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

Réseau/Web Python Discussion :

Parsage et nettoyage HTML


Sujet :

Réseau/Web Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 9
    Par défaut Parsage et nettoyage HTML
    Bonsoir,
    Dans mon application, je télécharge une page web afin de la parser pour en extraire des infos.
    Dans cette page ce trouve l'élément suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type='hidden' name='cler' value='blabla'>
    Suite à mes recherches, j'ai trouvé qu'on pouvait utiliser l'API BeautifulSoup
    Ce qui devrait donner ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    soup = BeautifulSoup(page_web)
     cle = soup.find('input',name='cler',type='hidden')
    Seulement le code html que je récupère est sale, du coup BeautifulSoup a beau être costaud, il plante lamentablement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HTMLParser.HTMLParseError: junk characters in start tag: u'[0]>',
    J'ai lu que l'on pouvait nettoyer le code avec l'API tidy, j'ai donc écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tidied=tidy.parseString(page_web)
    L'embêtant c'est que la variable tidied est un document de type tidy est que je n'arrive pas à m'en servir avec beautifulSoup.

    Avez-vous une solution ?
    Merci.

  2. #2
    Membre chevronné Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Par défaut
    Bonjour,

    Je tombe par hasard sur votre message, un peu tard sans doute. J'ai une appli basée sur BeautifulSoup, et j'y trouve ça:
    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
    def tidy_preprocess(html, options=None):
        """Traîte un HTML (str) par Tidy et renvoie un HTML (str). Un dictionnaire d'options 
        Tidy peut être passé, sinon les options en dur dans le code seront utilisées.
        
        @Param html: une str, le HTML à traiter.
        @Param options: un dict, options pour Tidy .
        
        @Return: le HTML (str) traité par Tidy.
        
        """
        if not options:#options à éditer
            options = { "enclose-text": 1,
                        "drop-empty-paras": 1
                        }        
     
        return str(tidy.parseString(html, **options)) #IGNORE:W0142
    La solution semble donc pour vous d'écrire tout simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tidied = str(tidy.parseString(page_web))
    ATTENTION ! c'est sans garantie, il se trouve que j'ai mis le prétraitement Tidy en commentaire, je ne sais plus pourquoi.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 9
    Par défaut
    Merci de ta réponse, j'avais trouvé une alternative, j'ai oublié de la poster :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    from lxml import etree
    html= etree.HTML(sale_html)
    result = etree.tostring(html, pretty_print=True, method="html")
    soup = BeautifulSoup(result)
    cle= soup.find(attrs={"name" :"cler"})
    value=cle.attrs[2][1]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] Nettoyage de code html avec preg_replace
    Par olbouss dans le forum Langage
    Réponses: 13
    Dernier message: 24/09/2009, 15h03
  2. ElementTree probleme de parsage d'un document html
    Par marcolo dans le forum Général Python
    Réponses: 2
    Dernier message: 03/06/2009, 20h59
  3. [SAX] Parsage de html encoded
    Par *alexandre* dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 29/10/2007, 12h54
  4. [MySQL] copier une page html après nettoyage dans une base mysql en php
    Par araoudiou dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 21/05/2007, 21h49
  5. Nettoyage des attributs HEIGHT et WIDTH des tags html IMG d'une page html
    Par elitost dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 21/02/2007, 16h44

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