Annonce

Réduire
Aucune annonce.

Qu'est-ce qu'on peut faire avec une URL ?

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Qu'est-ce qu'on peut faire avec une URL ?

    Bonjour à tous,

    Voici ci-dessous une classe que j'ai créé permettant de vérifier, ouvrir et afficher tout les liens morts dans une page web

    Vous aurez besoin des modules suivants:
    1. lepl
    2. lxml
    3. requests



    Code:
    import webbrowser as wb
    from lepl.apps.rfc3696 import HttpUrl # pour valider une url
    import lxml.html
    import requests
    
    class Url:
        def __init__(self, myUrl):
            self.url = myUrl
            self.redirect = None
            self.valid = self.is_opened()
        
        def is_validate(self):
            """Est-ce que l'URL est convenablement écrit ?"""
            validator = HttpUrl()
            
            if not validator(self.url):
                return False
            
            return True
        
        def is_opened(self):
            """Est-ce que l'URL est atteignable ?"""
            if self.is_validate():
                r = requests.get(self.url)
                
                code = r.status_code
                
                if code == 200:
                    self.redirect = r.url
                elif code == 302 or code == 301:
                    self.redirect = r.headers['Location']
                
                return True
            
            return False
            
        def open(self, browser=None):
            """Ouvrir la page dans un navigateur web"""
            
            if not self.valid:
                return
            
            if browser:
                try:
                    browser = wb.get(browser)
                except wb.Error:
                    browser = None
            
            if browser:
                browser.open(self.url)
                
            wb.open(self.url)
            
        def getAllLinks(self):
            """Trouver tous les liens d'une page"""
            
            if not self.valid:
                return
            
            r = requests.get(self.url)
            page = r.content
            dom =  lxml.html.fromstring(page)
    
            for link in dom.xpath('//a/@href'):
                yield link
    Si je voulais vérifier tout les liens morts d'une page web

    Code:
    myURL = Url("http://www.google.fr")
    for url in myURL.getAllLinks(): # recherche tous les liens de la page web
        url = Url(url)
        if url.url.startswith('/'): # Gestion des liens relatifs à la page web
            url = Url(myURL.url+url.url)
            if not url.valid:
                print(url.url)
        elif not url.valid: # Gestion des liens absolus à la page web
            print(url.url)
    Bien-sûr ce code est perfectible, améliorable surtout dans le sens ajouts de fonctionnalités, mais ça permet déjà pas mal de choses basiques.
    Dernière modification par fred, 15 janvier 2016, 18h50. Motif: Modification code, prend en compte les redirections et les chemins relatifs des divers liens de la page web

  • #2
    Merci pour ton code Fred.
    J'ai une petite question : Concrètement, qu'est-ce qu'on peut faire avec des liens morts ?

    Commentaire


    • #3
      J'ai une petite question : Concrètement, qu'est-ce qu'on peut faire avec des liens morts ?
      Modifier son forum, site en conséquence ?

      Commentaire


      • #4
        Tu a un forum, tu a des liens morts tu vérifie et tu les vire, cela te permet de ne pas avoir des pénalisation par google et de conserver ton SEO intact.

        Je trouve l'idée interressante, bizzarement similaire (je parle de l'idée de celle d'Anonyme77 avec le module twill) mais bien tout de même, fallait y penser en fait.

        Commentaire


        • #5
          Je trouve l'idée interressante, bizzarement similaire (je parle de l'idée de celle d'Anonyme77 avec le module twill) mais bien tout de même, fallait y penser en fait.
          Mon petit smiley était un clin d’œil à notre ami Anonyme77, version plus complète, avec python 3.x et surtout modélisable... Utilisation de la classe quand on en a besoin dans un autre code.

          Bref l'idée, elle m'est venu quand j'ai vu son code, ça m'a permis d'avoir une idée assez complète de ce que je voulais faire en langage python.

          Commentaire


          • #6
            Tu n'a pas à te justifier t'inquiète, ce n'est pas du tout un reproche, l'idée est la même mais c'est interressant d'avoir deux manières d'aborder cette idée. Au contraire, moi cela me convient. Après je m'en doutais que c'était ainsi que tu l'avais eu l'idée, c'est grosso como un camion Mais l'important est que tu a apporter ta façon de le coder et donc une alternative à twill, plutôt sympas d'ailleur vu que e ne connaissais pas non plus.

            Après je ne regarde pas tout.

            Commentaire


            • #7
              J'avais compris ton clin d'oeil fred et je dois bien avouer que ta technique m'a semblé très intéressante.

              J'avoue que je suis loin d'être un expert en python.
              Je n'ai jamais eu ou pris le temps d'étudier ce langage jusque dans ses derniers retranchements.
              Je devrais le faire car c'est un langage que j'aime vraiment.

              Du coup, ton code me permet de voir ce qu'il se passe globalement dans Twill (le système général je veux dire).

              Merci beaucoup d'avoir éclairé ma lanterne.
              Comme dit l'expression, je m'endormirai moins c** ce soir .

              Commentaire


              • #8
                En fait j'ai l'impression que mon code fait beaucoup plus, non? Le tiens correspond à lui seul à ma méthode open, je me trompe ?
                Après je connais pas twill, mais il n'est apparemment pas suivi sur la version python 3.x ?

                Je pense que mon code (je le permet) peut être copié dans ton blog pour différentes utilisation comme:
                1. ouvrir une URL avec choix d'un navigateur autre que celui par défaut
                2. Analyser une page web et en déduire tout les liens de la page
                3. Analyser le format d'une URL et en déduire sa validité
                4. Vérifier le statut de réponse au chargement d'une page


                Maintenant si ton code en fait autant, et que je me trompe, alors autant pour moi

                Commentaire


                • #9
                  Je pense que Twill permet de faire une bonne part des points que tu as cités.
                  Je trouve cette librairie puissante.

                  Je reconnais que mon code ne le permet pas. Il n'exploite pas toutes les possibilités de la librairie ou même du langage.

                  Remarque, j'ai un peu plus détaillé les possibilités de Twill dans mon article.
                  Comme la gestion des formulaires, des sessions, etc. Par contre, il est vrai que je n'ai pas écrit de code (publique) exploitant ces parties de Twill.
                  Mon but était en fait de faire un oneshot pour vérifier les 1600 et quelques urls.

                  Si tu l'acceptes, je posterai donc ton code en le liant bien à ton post original fred.
                  Je ferai ça très probablement cette nuit ou demain.

                  Encore une fois, merci beaucoup de me faire me coucher moins bête .

                  Commentaire


                  • #10
                    Désolé pour le double post.

                    @fred : Voici l'article contenant ton code sur mon site : http://www.spidermind.be/blog/anonym...e-avec-une-url
                    Dis moi par mp ce que tu en penses et si tu souhaites que je change certaines formulations ou certains liens.

                    Commentaire


                    • #11
                      Rien à dire...

                      Commentaire

                      Chargement...
                      X