Web Crawler es un bot que descarga el contenido de Internet y lo indexa. El objetivo principal de este bot es aprender sobre las diferentes páginas web en Internet. Este tipo de bots es operado principalmente por motores de búsqueda. Al aplicar los algoritmos de búsqueda a los datos recopilados por los rastreadores web, los motores de búsqueda pueden proporcionar los enlaces relevantes como respuesta a la solicitud solicitada por el usuario. En este artículo, analicemos cómo se implementa el rastreador web.
Webcrawler es una aplicación muy importante del algoritmo de búsqueda Breadth-First . La idea es que todo Internet se pueda representar mediante un gráfico dirigido:
- con vértices -> Dominios/ URLs/ Sitios web.
- bordes -> Conexiones.
Ejemplo:
Enfoque: la idea detrás del funcionamiento de este algoritmo es analizar el HTML sin procesar del sitio web y buscar otra URL en los datos obtenidos. Si hay una URL, agréguela a la cola y visítela en forma de búsqueda en amplitud.
Nota: este código no funcionará en un IDE en línea debido a problemas de proxy. Intenta ejecutarlo en tu computadora local.
Java
// Java program to illustrate the WebCrawler import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Queue; import java.util.regex.Matcher; import java.util.regex.Pattern; // Class Contains the functions // required for WebCrowler class WebCrowler { // To store the URLs in the / /FIFO order required for BFS private Queue<String> queue; // To store visited URls private HashSet<String> discovered_websites; // Constructor for initializing the // required variables public WebCrowler() { this.queue = new LinkedList<>(); this.discovered_websites = new HashSet<>(); } // Function to start the BFS and // discover all URLs public void discover(String root) { // Storing the root URL to // initiate BFS. this.queue.add(root); this.discovered_websites.add(root); // It will loop until queue is empty while (!queue.isEmpty()) { // To store the URL present in // the front of the queue String v = queue.remove(); // To store the raw HTML of // the website String raw = readUrl(v); // Regular expression for a URL String regex = "https://(\\w+\\.)*(\\w+)"; // To store the pattern of the // URL formed by regex Pattern pattern = Pattern.compile(regex); // To extract all the URL that // matches the pattern in raw Matcher matcher = pattern.matcher(raw); // It will loop until all the URLs // in the current website get stored // in the queue while (matcher.find()) { // To store the next URL in raw String actual = matcher.group(); // It will check whether this URL is // visited or not if (!discovered_websites .contains(actual)) { // If not visited it will add // this URL in queue, print it // and mark it as visited discovered_websites .add(actual); System.out.println( "Website found: " + actual); queue.add(actual); } } } } // Function to return the raw HTML // of the current website public String readUrl(String v) { // Initializing empty string String raw = ""; // Use try-catch block to handle // any exceptions given by this code try { // Convert the string in URL URL url = new URL(v); // Read the HTML from website BufferedReader be = new BufferedReader( new InputStreamReader( url.openStream())); // To store the input // from the website String input = ""; // Read the HTML line by line // and append it to raw while ((input = br.readLine()) != null) { raw += input; } // Close BufferedReader br.close(); } catch (Exception ex) { ex.printStackTrace(); } return raw; } } // Driver code public class Main { // Driver Code public static void main(String[] args) { // Creating Object of WebCrawler WebCrowler web_crowler = new WebCrowler(); // Given URL String root = "https:// www.google.com"; // Method call web_crowler.discover(root); } }
Producción:
Website found: https://www.google.com Website found: https://www.facebook.com Website found: https://www.amazon.com Website found: https://www.microsoft.com Website found: https://www.apple.com
Aplicaciones: este tipo de rastreador web se utiliza para adquirir los parámetros importantes de la web como:
- ¿Cuáles son los sitios web visitados con frecuencia?
- ¿Cuáles son los sitios web que son importantes en la red en su conjunto?
- Información útil en redes sociales: Facebook, Twitter… etc.
- ¿Quién es la persona más popular en un grupo de personas?
- ¿Quién es el ingeniero de software más importante en una empresa?