Hoy voy a enseñarte a recorrer los enlaces de una página con Python (web scraping), esto puede ser muy útil para rastrear contenidos en una web de manera automática y no tener que hacerlo a mano. En el programa que traigo se obtiene cada enlace leyendo el html, podrías modificar el programa para buscar un cierto contenido y mostrar solo los enlaces en los que estás interesado.
También puedes hacer web scraping utilizando el fichero robots.txt o los sitemaps que tienen los sitios webs.
A continuación os dejo el código:
import queue import urllib.request import re from urllib.parse import urljoin def descargar(pagina): try: peticion = urllib.request.Request(pagina) html = urllib.request.urlopen(peticion).read() print("[*] Descarga OK >>", pagina) except: print('[!] Error descargando',pagina) return None return html def rastrearEnlaces(pagina): buscaEnlaces = re.compile('<a[^>]+href=["'](.*?)["']', re.IGNORECASE) cola = queue.Queue() cola.put(pagina) visitados = [pagina] print("Buscando enlaces en",pagina) while (cola.qsize() > 0): html = descargar(cola.get()) if html == None: continue enlaces = buscaEnlaces.findall(str(html)) for enlace in enlaces: enlace = urljoin(pagina, str(enlace)) if(enlace not in visitados): cola.put(enlace) visitados.append(enlace) if __name__ == "__main__": rastrearEnlaces("http://www.solvetic.com")Lo primero que hacemos es importar las librerías necesarias, para las expresiones regulares (re), para usar la cola (queue), para hacer peticiones y leer una página (urllib.request) y para la construcción de URLs absolutas a partir de una URL base y otra URL (urljoin).
- Creamos una variable con una expresión regular, que nos sirve para encontrar los enlaces en el html.
- Iniciamos una variable de tipo cola con la página inicial, nos servirá para ir guardando los enlaces en el “orden” que los descubrimos. También iniciamos una variable de tipo lista llamada visitados que utilizaremos para guardar los enlaces según se visiten, esto se hace así par evitar un bucle infinito, imaginar que una la página x referencia a la página y, y ésta a su vez a la página x, todo el rato insertaremos estos enlaces sin fin.
- El núcleo de la función es el bucle while, que se irá ejecutando mientras que la cola tenga enlaces, por eso comprobamos que el tamaó sea mayor a 0. En cada pasada sacamos un enlace de la cola y se lo mandamos a la función descargar, que nos devolvera el html, acto seguido buscamos los enlaces, y comprobamos si ya lo hemos visitado, si no es así lo agregamos a la cola y a la lista.
La última parte del código ya fuera de las funciones se encargará de ejecutar el código. En la siguiente imagen puedes ver una captura del código en ejecución, rastreando a solvetic.
Si quieres puedes ayudarte de una librería que existe para python llamada BeautifulSoup, te va a parecer muy fácil de manejar, yo la recomiento.
Por si quieres el código, a continuación te dejo un zip:
RecorrerEnlaces.zip 646 bytes 665 Descargas