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

XML/XSL et SOAP Discussion :

Parsing HTML et problème de filtre via XPath


Sujet :

XML/XSL et SOAP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 52
    Points : 32
    Points
    32
    Par défaut Parsing HTML et problème de filtre via XPath
    Bonjour,

    j'ai un petit problème d'XPath qui en théorie devrait être simple à résoudre, mais je me suis fait quelques noeuds au cerveau, j'aurai besoin d'un oeil extérieur là-dessus...

    Voici mon problème, je parse un page HTML dont j'essaie d'extraire un liste de photos. Pour cela j'utilise des chemins XPath.

    http://www.airliners.net/search/phot...nct_entry=true

    Pour l'instant mon xpath est le suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //A[@target='_blank']/IMG
    Je choppe toutes les images qui ont pour parent un lien avec en target "_blank"

    ça marche pas mal, sauf qu'il me récupère des images en trop, les gif d'enveloppe dans la case photographer.

    Une idée comme ça serait de filtrer sur les "A" qui n'ont pas d'attribut "class", mais je sais pas faire ça, j'ai quand même testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //A[@target='_blank' and !@class]/IMG
    Mais ça marche pas...

    Voilà, si une âme charitable pouvait se pencher sur ce problème ça serait sympa


    EDIT :
    Finalement j'ai réussi à résoudre ce problème, en fait fallait utiliser l'opérateur not()
    =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //A[@target='_blank' and not(@class)]/IMG
    Par contre j'ai un autre problème. Qui y ressemble, du coup je dois également parser l'adresse suivante :

    http://www.planepictures.net/netsear...&stype=airline

    Mais idem, il me retourne la petite image "Edit Details" (dans le bandeau gris).

    Voilà si quelqu'un a une idée pour ce problème là, et petite question bonus, y a-t-il possibilité d'optimiser mon xpath ? Là je pense que c'est un peu bourrin...

    Merci.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 608
    Points
    21 608
    Par défaut
    Je me demande quel moteur DOM/XPath arrive à se dépatouiller avec ces pages.

    Ce que tu pourrais tenter, c'est "les images qui sont dans la première colonne de la table," ou "les images qui ont un lien qui commence par /netshow.php"
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 52
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Je me demande quel moteur DOM/XPath arrive à se dépatouiller avec ces pages.

    Ce que tu pourrais tenter, c'est "les images qui sont dans la première colonne de la table," ou "les images qui ont un lien qui commence par /netshow.php"
    A priori n'importe lequel, ce n'est guère que de l'HTML, non ?
    Pour ma part c'est en java avec
    org.w3c.dom.Document; // Pour le DOM
    et
    com.sun.org.apache.xpath.internal.XPathAPI; // Pour les XPath

    en termes de perfs, je suis pas un spécialiste, j'ai pris le premier qui marchait...

    Sinon, pas idiot le coup de l'image en première colonne, je vais le tenter.
    Par contre pour les images dont le lien pointe sur /netshow.php, le soucis, c'est que j'aimerais avoir une seule XPath pour les 2 sites cités, or sur le site http://www.airliners.net/ les adresses sont en absolu et ne tapent pas sur netshow.php.

    Merci du coup de main en tout cas


    EDIT :
    Arf c'est presque ça, mais malheureusement les petits gif sont aussi dans la première case d'un tableau... (saletés de tableaux imbriqués !)

    Pour l'instant je pars sur la solution suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "//TD[1]/A[@target='_blank']/IMG[contains(@href, jpg)]"
    Je choppe seulement les images qui contiennent jpg...

    J'ai pas réussi à limiter par extension,
    en effet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "//TD[1]/A[@target='_blank']/IMG[contains(@href, .jpg)]"
    il comprend pas, le . le fait bugger, et ça ne garantie pas que ça soit en fin de chaine non, plus. Apparement y aurait une fonction ends-with, mais qui n'est implémentée qu'en XPath 2.0, ce qui n'a pas l'air d'être le cas de ma lib.

    Je suis toujours à l'écoute de meilleures solutions

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 608
    Points
    21 608
    Par défaut
    Citation Envoyé par mastasushi Voir le message
    A priori n'importe lequel, ce n'est guère que de l'HTML, non ?
    Pour ma part c'est en java avec
    org.w3c.dom.Document; // Pour le DOM
    et
    com.sun.org.apache.xpath.internal.XPathAPI; // Pour les XPath
    Ben justement, DOM je dis pas, mais XPath c'est plutôt utilisé pour le XML, normalement. C'est pas que je sois contre un peu d'ouverture, mais je me demande comment les règles changent pour s’accommoder.

    Et ces interfaces-là pourraient convenir, oui, mais avec quelle implémentation ? Les implems habituelles ne gèrent que le XML, pas le HTML.


    Pour le reste, tu pourras vouloir bricoler une "fin de chaîne" avec string-length() et substring().
    Et je rappelle que l'URL d'une image c'est src, pas href. (Ce que je trouve un peu con, personnellement.)
    Et qu'il faut entourer jpg ou .jpg d'apostrophes, pour indiquer que c'est une string. Sinon, il va chercher des éléments <jpg> ou <.jpg>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 52
    Points : 32
    Points
    32
    Par défaut
    Nickel ça marche, effectivement j'avais fait n'importe quoi avec le href... c'est bien
    Ce que je trouvais bizarre c'est que
    Me sortait quand même des résultats, presque corrects... je sais pas trop comment il a résolu l'Xpath...

    M'enfin, ça marche maintenant, merci du coup de main

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

Discussions similaires

  1. [Débutant] Parsing HTML avec HtmlAgilityPack et Xpath
    Par patrickvier dans le forum VB.NET
    Réponses: 1
    Dernier message: 02/06/2013, 23h20
  2. Réponses: 4
    Dernier message: 14/05/2010, 15h41
  3. Réponses: 0
    Dernier message: 13/05/2010, 01h53
  4. [Upload] Problème Upload Fichiers via html
    Par Typhon dans le forum Langage
    Réponses: 3
    Dernier message: 11/02/2007, 11h52
  5. [MySQL] Filtre via formulaire HTML/PHP dans Base mySQL
    Par Al3x dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 14/01/2006, 16h27

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