Este proyecto considera dos clases: Main.java
y Scraper.java
. La idea principal del proyecto es llenar un grafo con páginas web como nodos y una URL inicio indicada en la clase Main como raíz, y luego buscar una conexión a una página destino utilizando el algoritmo de búsqueda BFS (Breadth First Search o Búsqueda por Anchura)
Esta clase es la clase controladora del proyecto. Indica el grafo a utilizar y su profundidad y las URL de inicio y destino del problema.
- Declara las variables del problema.
- Declara un objeto
Scraper
para que inicialice internamente el grafo con los datos del problema. - Le indica a
Scraper
que busque los links para llenar el grafo. - Luego de que se llene el grafo, llama una búsqueda BFS para verificar si hay una conexión entre el nodo de inicio y el final.
Esta clase se encarga de llenar el grafo recursivamente, con una profundidad indicada por la clase Main
al ser invocado. Profundidad en este caso significa cuántos links debe adentrarse la raíz dentro de las páginas, por ejemplo, para una profundidad 2 se le indica al grafo que la raíz debe guardar todos los links apuntados por ésta, y luego también guardar todos los links apuntados por cada una de las páginas guardadas.
Al reconocer un link, intentará formatearlo para mantener una consistencia en los datos guardados. Los cambios se indican a continuación:
- Cambia los enlaces relativos a enlaces absolutos. Por ejemplo, si la página es http://ubiobio.cl/ y el link relativo llama a
/admision
el link a guardar será http://ubiobio.cl/admision - Cambia todos los links
https
ahttp
, y elimina el subdominiowww.
por simplicidad. Esto significa que, por ejemplo, las variaciones http://ubiobio.cl/, https://ubiobio.cl/, http://www.ubiobio.cl/ y https://www.ubiobio.cl/ apuntarán siempre a http://ubiobio.cl/. - Limpia espacios blancos. Por ejemplo
http://example.com/esto es una prueba
cambia a http://example.com/esto%20es%20una%20prueba - Agrega un
/
al final de las páginas que no lo contengan por consistencia. Por ejemplo si se quiere guardar http://ubiobio.cl se guardará http://ubiobio.cl/
- Conecta a la página con URL dado para obtener su archivo.
- Encuentra todos los elementos que sean links (
href
). - Formatea el link.
- Si sigue siendo un link válido agregar el vértice al grafo y conectarlo con el link base.
- Itera la función sobre el link encontrado.
Dadas las siguientes condiciones:
Variable | Valor |
---|---|
profundidad | 2 |
urlBase | http://ubiobio.cl/ |
destino | http://mevacuno.gob.cl/ |
La salida mostrada por consola será:
Ruta encontrada:
-> http://ubiobio.cl/
-> http://educacionsuperior.mineduc.cl/
-> http://mevacuno.gob.cl/
Dadas las siguientes condiciones:
Variable | Valor |
---|---|
profundidad | 2 |
urlBase | http://ubiobio.cl/ |
destino | http://google.cl/ |
La salida mostrada por consola será:
La pagina destino no se encuentra en el grafo.
- Se asume que los links
urlBase
ydestino
enMain
están formateados correctamente - El programa no reconocerá los links que puedan mostrarse luego de cargar un script
- El programa considera links que estén contenidos en
<a href>
La clase a ejecutar para este proyecto es Main.java
, y debe usar Java 16. Este proyecto fue compilado usando Maven y se deben adjuntar las dependencias indicadas en el apartado correspondiente.
Para este proyecto se utilizó JgraphT para manejar el grafo y la búsqueda en éste, y Jsoup para manejar las conexiones a las páginas y el scraping de sus documentos. Las siguientes dependencias se incluyen en el archivo pom.xml
:
<dependency>
<groupId>org.jgrapht</groupId>
<artifactId>jgrapht-core</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<!-- jsoup HTML parser library @ http://jsoup.org/ -->
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.14.3</version>
</dependency>