¿Qué es un Webcrawler y dónde se utiliza?

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: 

  1. ¿Cuáles son los sitios web visitados con frecuencia?
  2. ¿Cuáles son los sitios web que son importantes en la red en su conjunto?
  3. Información útil en redes sociales: Facebook, Twitter… etc.
  4. ¿Quién es la persona más popular en un grupo de personas?
  5. ¿Quién es el ingeniero de software más importante en una empresa?

Publicación traducida automáticamente

Artículo escrito por GTGSTG y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *