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 :

urllib & htmlparser arrêté en cours de page


Sujet :

Réseau/Web Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 17
    Points : 10
    Points
    10
    Par défaut urllib & htmlparser arrêté en cours de page
    Salut à tou,

    Je me mets à python et urllib pour essayer de faire un petit parser de pages web. C'est une bonne introduction pour se mettre à python.
    Mon but est de récupérer une liste de liens dans une page donnée.

    J'utilise donc htmlparser pour ouvrir une page, et voilà que je passe dans comme prévu, sauf que il ne fait pas toute la page, comme si le feed ne suivait pas une page trop grosse.

    Je vous refile le code, qui ouvre une page d'un site oueb, parce que si vous avez une explication (il doit bien y en avoir une), je suis preneur :

    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
     
    from HTMLParser import HTMLParser
    from urllib2 import urlopen
    from urllib import urlencode
     
     
    class BasicPage(HTMLParser):
        def __init__(self):
            HTMLParser.__init__(self)
            self.url = 'http://www.zeturf.fr/fr/resultats'
            self.req = urlopen(self.url)      
            self.ligne = self.req.read()
            self.ligne = self.ligne.decode("latin1")
            self.feed(self.ligne)
     
        def handle_starttag(self, tag, attrs):
                if tag == 'a' and attrs:
                    print tag + ' ' + attrs[0][0] + " = " + attrs[0][1]
                else:
                    print tag 
     
    toto=BasicPage()
    et là, misère... ma dernière balise affichée est "li", que l'on retrouve en plein milieu du code source de la page.

    J'ai pris soin de faire un read() en mode console de la page, histoire d'être sur que je récupère bien toute la page (au cas où...) et tout est ok.

    Qui a une idée de la raison pour laquelle le feed s'arrête en plein milieu de page?

    Merci d'avance pour vos idées!

    Nicolo

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 17
    Points : 10
    Points
    10
    Par défaut Précisions...
    Re-Salut,


    quand je me relis, je trouve mon premier message pas très clair; alors je tente de ré-expliquer, afin d'obtenir une réponse...

    Je vous encourage à faire le petit essai de copier/coller le code dans un script, et le lancer... ça prend 10 secondes; c'est faisables, non?

    Le code fourni est censé :


    Tout marche bien, sauf que le parsing de page s'arrête en plein milieu de page (comparer au code source de la page, vous verrez!), et je ne m'explique pas pourquoi.

    Pour être sûr que la page était bien récupérée (rt que le parsing ne se fait donc pas sur une page incomplète), un read() sur la page m'a bien affiché tout son contenu (y compris les éléments non pris en compte dans le parsing).


    HELP! quelqu'un a-t-il une idée?

    parce que là, je sèche...

    Merci d'avance à ceux qui me donneront un coup de main

    Nicolo

  3. #3
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Pas étonnant que ça foire, ce site est codé avec les pieds.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    title="Cotes Prix PMU "Le Carnot" A Dompaire (Prix Saint-Nicolas)">
    Mettre des guillemets non échappé dans un attribut c'est pas sérieux, et c'est surement la cause de tes soucis.

    Essaye de passer ça à HTML Tidy. Si lui ne sait rien faire, t'es pas sorti de l'auberge.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Salut Antoine,

    merci pour ta proposition (je désespérais que quelqu'un essaie de me filer un coup de main).

    Me voilà sorti de l'auberge, parce que le parsing de ma page peut se faire un peu mieux maintenant.
    Donc un énorme MERCI à toi :


    Reste un truc qui m'intrigue, même s'il n'est pas bloquant...
    je me suis aperçu que les imports du début n'étaient pas cohérents; donc je remplace ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from urllib2 import urlopen
    from urllib import urlencode
    par ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from urllib import urlopen
    from urllib import urlencode
    et là, oh misère, une vieille exception toute pourrie, pour laquelle personne n'a jamais trouvé de solution sur le oueb d'après mes recherches; l'exception se produit dans le urlopen()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exception AttributeError: "'NoneType' object has no attribute 'print_exc'" in <bound method FancyURLopener.__del__ of <urllib.FancyURLopener instance at 0x89912ac>> ignored

    eheh...
    je peux rester avec la version from urllib2 import urlopen, vu que ça me parse quand même ma page suffisamment et sans exception; mais j'ai un peu de mal à comprendre ce qui cloche.

    Si une bonne âme a une idée... pour ma culture...


    Merci d'avance

    Au fait, merci pour les Cours et tutoriels pour apprendre Python , en particulier celui la est cool : Apprendre à programmer avec Python 3 par Gérard Swinnen




    Nicolo

Discussions similaires

  1. redefinir firstmark en cours de page ?
    Par goued120 dans le forum Mise en forme
    Réponses: 5
    Dernier message: 07/08/2008, 17h23
  2. [script.aculo.us] Effet arrété en cours => bug
    Par pouillou dans le forum Bibliothèques & Frameworks
    Réponses: 7
    Dernier message: 12/06/2007, 15h11
  3. Arrêt des numéros de pages
    Par Aline2611 dans le forum Mise en forme
    Réponses: 3
    Dernier message: 11/07/2006, 16h20

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