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 :

recupérer arborescence et contenu d'un site


Sujet :

Réseau/Web Python

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 29
    Points : 24
    Points
    24
    Par défaut recupérer arborescence et contenu d'un site
    salut à tous,

    Je dois récupérer le contenu html d'un site web à partir de l'url en python, pour faire ça, j'ai pensé à d'abord récupérer l'arborescence du site, puis faire une boucle afin de récupérer le contenu html à partir des liens, mais en python , je ne sais pas comment le faire .

    merci d'avance

  2. #2
    Membre expérimenté Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    Dans le principe il suffit de récuperer la page web puis d'extraire (regex?) et d'analyser (lien interne, externe) les liens hypertextes contenus dans la page puis de les télecharger et de recommencer ...

    Mais ce que tu veux existe déjà, c'est un aspirateur de site et tu trouveras facilement ça sur
    "Etre conscient de la difficulté permet de l'éviter.."
    Lao-Tseu.

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 29
    Points : 24
    Points
    24
    Par défaut
    je c'est que les aspirateurs de site existent, mais moi je dois réaliser ça en python, et pour récupérer l'arborescence à partir d'un lien, je ne vois pas comme faire ça.

  4. #4
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Salut,

    Ton objectif n’est pas assez bien défini pour qu’on sache comment t’aider.

    S’agit-il:

    - de ne s’intéresser qu’à un seul site, et d’écrire un code qui sera capable de récupérer les contenus de toutes les pages du site, en suivant tous les liens trouvés dans chaque page ?
    Un tel objectif pourrait être motivé par le fait que récupérer à la main les contenus serait trop long, ou que des mises à jour fréquentes rendrait vite fastidieuse l’acquisition des contenus nouveaux.


    - ou de concevoir un programme général apte à capturer le contenu de n’importe quel site, c’est à dire capable de s’adapter à toutes les particularités d’un site inconnu a priori ?
    Autrement dit, c’est vouloir faire un aspirateur de site.


    Il est clair que le premier objectif semble plus facilement atteignable parce qu’on pourrait se permettre des facilités du fait que la structure du site serait plus stable que la structure non préalablement connue de n’importe quel site.







    Personnellement, avec une adresse URL, la seule première chose que je sache faire est la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import urllib
     
    url = 'http://fr.wikipedia.org/wiki/Max_Peck'
    sock = urlib.urlopen(url)
    ch = sock.read()
    sock.close()
    Une fois le code-source de la page enregistré dans la chaîne ch, je peux lancer tous les traitements que je veux.

    - Pour ma part, je sais exactement ce que je veux dans les pages que je capte et je ne recherche pas des liens. J’exploite chaque code-source en l’analysant avec des regex et des méthodes de string. Je ne connais donc pas très bien les parsers.

    - Mais pour ce qui te concerne, si tu veux d’abord établir l’arborescence du site, il te faut traiter les pages avec un parser, en commençant par la première.
    Beautiful Soup est un parser de code HTML qui devrait te permettre de faire ce préalable.
    C’est à dire qu’une fois le code-source d’une page mis dans une chaîne ch, tu donnes ch en patûre au parser et tu le règles pour qu’il te sorte tous les liens dans la pge. Ça devrait marcher comme ça si j’ai bien compris à quoi sert un parser.

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Ben c'est un processus récursif puisque chaque page va lister les pages suivantes dans les 'anchors'/liens.

    Ensuite, il te faut établir si elles sont locales ou déjà visitées.
    'déjà visité' peut signifier stocker les pages sur disque.

    A la base c'est pas très compliqué mais dans la pratique tu verras qu'il y a plein de pièges qui risquent de remplir le disque ou de faire des boucles.

    Pour trouver les 'anchors'/liens, tu peux utiliser HTMLparser de htmllib: feed, close et return de anchorlist

    Voir http://cis.poly.edu/cs912/parsing.txt pour des exemples.

    Regardes ce que remonte Google avec python crawler.py ou spider.py... ils pourront t'inspirer à défaut de te plaire
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Points : 32 889
    Points
    32 889
    Par défaut
    Bonjour,

    Le but de ce forum est d'aider les personnes en difficulté, pas de faire leur code.
    Si tu as fait un code et si tu as un problème avec ce code, poste le et on verra pour t'aider à le faire fonctionner

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 29
    Points : 24
    Points
    24
    Par défaut
    merci bien,

    j'ai utilisé plusieurs librairies, parmi celles qui marchent, il y a lswww, le code est comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import lswww
    lw=lswww.lswww('http://www.monsite.com/')
    lw.setTimeOut(1)
    lw.go()
    lw.printLinks()
    mais le problème c'est que je trouve la récupération est trop lente, donc si quelqu'un peut m'aider à le faire plus rapidement svp.pour la récupération de la page html le code est comme suit (il marche):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import urllib2
    import BeautifulSoup
     
    myUrl="http://www.monsite.com/"
    myPage=urllib2.urlopen(myUrl)
    mypageBuffer=myPage.read()
    myPage.close()
    mySoup=BeautifulSoup.BeautifulSoup(mypageBuffer)
    print mySoup.prettify()
    maintenant le truc c'est que je c'est pas comment coller les deux code, pour récupérer le code html du site en entiers, mettre les résultats du premier code dans une liste, un dico...

    merci à l'avance.

Discussions similaires

  1. [jTree]Recupérer l'objet contenu dans la feuille
    Par nesbla dans le forum Composants
    Réponses: 1
    Dernier message: 27/11/2006, 15h03
  2. Réponses: 2
    Dernier message: 02/11/2006, 10h00
  3. Réponses: 4
    Dernier message: 23/07/2006, 20h42
  4. Propriété et contenu d'un site web perso ?
    Par elitost dans le forum Juridique
    Réponses: 18
    Dernier message: 20/06/2006, 13h56
  5. Arborescence des sujets sur ce site
    Par Invité dans le forum Evolutions du club
    Réponses: 2
    Dernier message: 10/11/2004, 18h32

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