Comment suivre les liens sur un site Web à l'aide de Python

Table des matières

Aujourd'hui je vais t'apprendre parcourir les liens sur une page avec Python (grattage web), cela peut être très utile pour suivre automatiquement le contenu d'un site Web et ne pas avoir à le faire à la main. Dans le programme que j'apporte, chaque lien est obtenu en lisant le html, vous pouvez modifier le programme pour rechercher un certain contenu et n'afficher que les liens qui vous intéressent.

Vous pouvez également effectuer du grattage Web à l'aide du fichier robots.txt ou des plans de site des sites Web.

NoterLe code affiché fonctionne en Python 3.x, si vous voulez l'exécuter en version 2.x vous devrez faire de petites modifications.

Voici le code :

 file d'importation import urllib.request import re depuis urllib.parse import urljoin def download (page): try: request = urllib.request.Request (page) html = urllib.request.urlopen (request) .read () print ("[ *] Télécharger OK >> ", page) sauf : print ('[!] Erreur de téléchargement', page) return None return html def crawlLinks (page) : searchLinks = re.compile ('] + href = ["'] ( . *?) ["']', re.IGNORECASE) queue = queue.Queue () queue.put (page) visité = [page] print (" Recherche de liens dans ", page) while (queue.qsize () > 0) : html = download (queue.get ()) if html == None : continue links = searchLinks.findall (str (html)) pour le lien dans les liens : link = urljoin (page, str (link)) if ( lien non visité) : queue.put (lien) visité.append (lien) si __name__ == "__main__": crawlLinks ("http://www.solvetic.com") 
La première chose que nous faisons est jeimporter les bibliothèques nécessaires, pour les expressions régulières (re), pour utiliser la file d'attente (queue), pour faire des requêtes et lire une page (urllib.request) et pour la construction d'URL absolues à partir d'une URL de base et d'une autre URL (urljoin).

Code divisé en 2 fonctions
TéléchargerIl nous aide à télécharger le html d'une page. Il n'a pas besoin de beaucoup d'explications, la seule chose qu'il fait est une requête à la page souhaitée, il lit son html, si tout se passe bien il affiche un message Download OK, et s'il ne montre pas qu'il y a eu une erreur (Ici on pourrait afficher des informations sur l'erreur), à la fin renvoie la lecture html ou None.
suivre les liensC'est la fonction principale et elle s'exécutera à travers chaque lien. Expliquons-le un peu :

  • Nous créons une variable avec une expression régulière, qui nous aide à trouver les liens dans le html.
  • Nous commençons une variable de type tail avec la page initiale, cela nous aidera à enregistrer les liens dans "l'ordre" dans lequel nous les avons découverts. Nous démarrons également une variable de type liste appelée visité que nous utiliserons pour enregistrer les liens au fur et à mesure qu'ils sont visités, ceci est fait pour éviter une boucle infinie, imaginez que la page x fait référence à la page y, et ceci à son tour à la page x , tous les tandis que nous insérerons ces liens à l'infini.
  • Le cœur de la fonction est la boucle while, qui sera exécutée tant que la file d'attente a des liens, nous vérifions donc que la taille est supérieure à 0. À chaque passage, nous supprimons un lien de la file d'attente et l'envoyons à la fonction de téléchargement , qui nous renverra le html, puis nous cherchons les liens, et nous vérifions si nous l'avons déjà visité, sinon, nous l'ajoutons à la file d'attente et à la liste.

NoterPuede parecer que la lista sobra, pero de la cola vamos a ir sacando y borrando los enlaces, por lo que la comprobación no sería correcta, a lo mejor el enlace le visitamos hace rato y ya no está en la cola, pero si estará en la liste.

La dernière partie du code en dehors des fonctions s'occupera de l'exécution du code. Dans l'image suivante, vous pouvez voir une capture d'écran du code en cours d'exécution, traçant solvetic.

Si vous le souhaitez, vous pouvez vous aider d'une librairie qui existe pour python appelée BeautifulSoup, elle vous paraitra très simple à prendre en main, je vous la recommande.

Au cas où vous voudriez le code, voici un zip :

TraverseLinks.zip 646 octets 493 Téléchargements

Avez-vous aimé et aidé ce tutoriel ?Vous pouvez récompenser l'auteur en appuyant sur ce bouton pour lui donner un point positif

Vous contribuerez au développement du site, partager la page avec vos amis

wave wave wave wave wave