Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 29455|Respuesta: 11

[Código fuente de Java] Versión Java del rastreador web

[Copiar enlace]
Publicado en 30/11/2014 16:56:56 | | | |
[mw_shl_code=java,true]/**
* @author Jack.Wang
*
*/
importar java.io.BufferedReader;
importar java.io.InputStreamReader;
importar java.net.URL;
import java.util.ArrayList;
importar java.util.HashMap;
importar java.util.HashSet;
importar java.util.LinkedHashSet;
import java.util.regex.Matcher;
importar java.util.regex.Pattern;

Buscar rastreadores web
la clase pública SearchCrawler implementa Runnable {

/*
  * disallowListCache cache robot no permite URLs buscadas. El protocolo Robot establece un archivo robots.txt en el directorio raíz del sitio web,
  * Especifica qué páginas del sitio son buscables para búsqueda restringida.
  * El programa de búsqueda debería saltarse estas áreas durante la búsqueda, aquí tienes un ejemplo de robots.txt:
  * # robots.txt para http://somehost.com/ User-agent:
  * No permite: /cgi-bin/
  * No permitir: /registro # Prohibir robots en la página de registro
  * Disallow: /login
  */

privado HashMap<String, ArrayList<String>> disallowListCache = new HashMap<String, <String>ArrayList>();
<String> ArrayList errorList = nuevo <String>ArrayList(); Mensaje de error
<String> Resultado de ArrayList = nuevo <String>ArrayList(); Resultados buscados
Inicio de la cadena de cadenas; Un punto de partida para comenzar tu búsqueda
int maxUrl; El número máximo de URLs procesadas
String searchString; Cadenas a buscar
booleano Sensible al caso = falso; Si hay que ser sensible a mayúsculas minúsculas o no
boolean limitHost = false; Si buscar dentro de un anfitrión restringido

Public SearchCrawler(String startUrl, int maxUrl, String searchString) {
  this.startUrl = startUrl;
  this.maxUrl = maxUrl;
  this.searchString = searchString;
}

public ArrayList<String> getResult() {
  resultado de retorno;
}

empty public run() { // Iniciar el hilo de búsqueda
  crawl(startUrl, maxUrl, searchString, limitHost, mayúsculasSensibles);
}

Detectar formato de URL
private URL verifyUrl(String url) {
  Solo se procesan las URLs HTTP.
  if (!url.toLowerCase().startsWith("http://"))
   return null;
  URL verifiedUrl = null;
  try {
   verifiedUrl = nueva URL(URL);
  } catch (Excepción e) {
   return null;
  }
  return verifiedUrl;
}

Detecta si el robot permite acceder a la URL dada.
private boolean isRobotAllowed(URL urlToCheck) {
  String host = urlToCheck.getHost().toLowerCase(); Consigue el anfitrión que da el RUL
  System.out.println("host="+host);

  Consigue una caché de URLs que tu host no permita buscar
  ArrayList<String> disallowList = disallowListCache.get(host);

  Si aún no tienes caché, descárgalo y hazlo en caché.
  if (disallowList == null) {
   disallowList = nueva ArrayList<String>();
   try {
    URL robotsFileUrl = nueva URL("http://" + host + "/robots.txt");
    Lector Búfer = nuevo Lector Búfer(
      nuevo InputStreamReader(robotsFileUrl.openStream()));

    Lee el archivo robot para crear una lista de rutas a las que no se puede acceder.
    Línea de cuerdas;
    mientras que ((línea = lector.readLine()) != nulo) {
     if (line.indexOf("Disallow:") == 0) {// ¿Contiene "Disallow:"
      String disallowPath = línea.subcadena ("Disallow:"
        .length()); Obtén el camino hacia el acceso prohibido

      Revisa las anotaciones.
      int commentIndex = disallowPath.indexOf("#");
      si (commentIndex != -1) {
       disallowPath = disallowPath.substring(0,
         Índice de comentarios); Elimina el comentario
      }

      disallowPath = disallowPath.trim();
      disallowList.add(disallowPath);
     }
    }

    Rutas de caché a las que este host no puede acceder.
    disallowListCache.put (host, disallowList);
   } catch (Excepción e) {
    regreso fiel; No hay archivos robots.txt en el directorio raíz del sitio web, y devuelve true
   }
  }

  String file = urlToCheck.getFile();
  System.out.println("File getFile()="+file);
  para (int i = 0; i < disallist.size(); i++) {
   Cadena disallow = disallowList.get(i);
   if (archivo.iniciaWith(disallow)) {
    return false;
   }
  }

  regreso fiel;
}

private String downloadPage(URL pageUrl) {
  try {
   Abrir la conexión a la URL para leer.
   Lector Búfer = nuevo LectorLector Búfer(nuevo LectorStreamInput(
     pageUrl.openStream()));

   Lee la página en el buffer.
   Línea de cuerdas;
   StringBuffer pageBuffer = nuevo StringBuffer();
   mientras que ((línea = lector.readLine()) != nulo) {
    pageBuffer.append(línea);
   }

   return pageBuffer.toString();
  } catch (Excepción e) {
  }

  return null;
}

Elimina "www" de la URL
private String removeWwwFromUrl(String url) {
  int index = url.indexOf("://www.");
  si (índice != -1) {
   return url.substring(0, index + 3) + url.substring(index + 7);
  }

  return (url);
}

Analiza la página y encuentra el enlace
ArrayList privado<String> retrieveLinks(URL páginaUrl, Cadena de páginaContenidos,
   HashSet crawledList, boolean limitHost) {
  Compila el patrón de coincidencia del enlace con expresiones regulares.
  Patrón p = Pattern.compile("<a\\s+href\\s*=\\s*\"?(. *?) [\"|>]",
    Pattern.CASE_INSENSITIVE);
  Emparejador m = p.emparejador(páginaContenido);

  <String> ArrayList linkList = nuevo <String>ArrayList();
  mientras que (m.find()) {
   Enlace de cadenas = m.group(1).trim();

   si (link.length() < 1) {
    continúa;
   }

   Salta el enlace a esta página.
   if (link.charAt(0) == '#') {
    continúa;
   }

   if (link.indexOf("mailto:") != -1) {
    continúa;
   }

   if (link.toLowerCase().indexOf("javascript") != -1) {
    continúa;
   }

   si (link.indexOf("://") == -1) {
    if (link.charAt(0) == '/') {// maneja absolutamente
     enlace = "http://" + pageUrl.getHost() + ":"
       + pageUrl.getPort() + enlace;
    } else {
     String file = pageUrl.getFile();
     si (file.indexOf('/') == -1) {// gestiona direcciones relativas
      enlace = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + "/" + enlace;
     } else {
      Ruta de cadena = archivo.subcadena(0,
        archivo.lastIndexOf('/') + 1);
      enlace = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + ruta + enlace;
     }
    }
   }

   int index = link.indexOf('#');
   si (índice != -1) {
    enlace = enlace.subcadena(0, índice);
   }

   enlace = eliminarWwwDeUrl(enlace);

   URL verificadaLink = verifyUrl(link);
   if (verifiedLink == null) {
    continúa;
   }

   /* Si restringes hosts, excluye aquellas URLs que no cumplan los criterios */
   si (limitHost
     && !pageUrl.getHost().toLowerCase().equals(
       verifiedLink.getHost().toLowerCase())) {
    continúa;
   }

   Salta esos enlaces que ya han sido procesados.
   if (crawledList.contains(link)) {
    continúa;
   }

   linkList.add(enlace);
  }

  return (linkList);
}

Busca en el contenido de una página web descargada para determinar si hay una cadena de búsqueda específica en la página

búsqueda booleana privadaStringMatches(String pageContents,
   String searchString, boolean caseSensitive) {
  Contenido de búsqueda en cadena = páginaContenido;
  if (!caseSensitive) {// si insensible a mayúsculas y minúsculas
   searchContents = páginaContenidos.aLowerCase();
  }

  Patrón p = Pattern.compile("[\\s]+");
  Términos de cadena[] = p.split(searchString);
  para (int i = 0; Yo < términos. largo; i++) {
   if (mayúsculasSensible) {
    si (searchContents.indexOf(términos) == -1) {
     return false;
    }
   } else {
    si (searchContents.indexOf(términos.toLowerCase()) == -1) {
     return false;
    }
   }
  }

  regreso fiel;
}

Realizar la operación de búsqueda real
Rastreo público de ArrayList<String> (String startUrl, int maxUrls,
   String searchString, boolean limithost, boolean caseSensitive) {

  HashSet<String> crawledList = nuevo <String>HashSet();
  LinkedHashSet<String> toCrawlList = nuevo <String>LinkedHashSet();

  si (maxUrls < 1) {
   errorList.add ("Valor de URL Max invalidado.");
   System.out.println ("Valor de URL Max inválido.");
  }

  si (searchString.length() < 1) {
   errorList.add ("Cadena de búsqueda faltante.");
   System.out.println ("Cadena de búsqueda perdida");
  }

  if (errorList.size() > 0) {
   System.out.println("err!!");
   return errorList;
  }

  Mover www desde la URL de inicio
  startUrl = removeWwwFromUrl(startUrl);

  toCrawlList.add(startUrl);
  while (toCrawlList.size() > 0) {

   si (maxUrls != -1) {
    if (crawledList.size() == maxUrls) {
     pausa;
    }
   }

   Obtén la URL al final de la lista.
   URL de cadena = toCrawlList.iterator().next();

   Elimina la URL de la lista de rastreo.
   toCrawlList.remove(url);

   Convierte la URL de la cadena en objeto URL.
   URL verificadaUrl = verifyUrl(url);

   Salta la URL si los robots no pueden acceder a ella.
   if (!isRobotAllowed(verifiedUrl)) {
    continúa;
   }

   Añadir URLs procesadas a crawledList
   crawledList.add(url);
   String pageContenido = descargaPágina(verifiedUrl);

   si (páginaContenido != null && páginaContenidos.longitud() > 0) {
    Obtén un enlace válido desde la página
    <String> ArrayList enlaces = retrieveLinks(verifiedUrl,
      páginaContenido, rastreadoLista, limitHost);

    toCrawlList.addAll(enlaces);

    si (searchStringMatches(pageContents, searchString,
      CaseSensitive)) {
     result.add(url);
     System.out.println(url);
    }
   }

  }
  resultado de retorno;
}

Función principal
empty estático público main(String[] args) {
  SearchCrawler crawler = nuevo SearchCrawler("http://www.itsvse.com/", 100,"Delver_Si");
  Búsqueda de hilos = nuevo Hilo (rastreador);
  System.out.println ("Empezar búsqueda...");
  System.out.println("result:");
  search.start();
  try {
   search.join();
  } catch (InterruptedException e) {
   TODO Bloque de captura autogenerado
   e.printStackTrace();
  }
}
}
[/mw_shl_code]

1.png (100.02 KB, Número de descargas: 591)

2.png (72.18 KB, Número de descargas: 596)

3.png (188.46 KB, Número de descargas: 606)





Anterior:PHP representa el 82,2% de los principales sitios web de 100W
Próximo:Visor de código fuente web de Java Edition
Publicado en 30/11/2014 18:07:24 |
Al ver la noticia de que Jack Ma aún estaba a 300 millones de alcanzar a Li Ka-shing para convertirse en el hombre más rico de Asia, me reí en mi corazón y revisé rápidamente mi ranking en Internet, que básicamente no se vio afectado, y el ranking se mantuvo en unos 1.400 millones, ¡ahora me siento aliviado! De hecho, yo también soy una persona con sueños, desde niño soñaba que algún día conduciría un coche deportivo Lamborghini de vuelta a nuestro pueblo con gafas de sol, después de casi 20 años de trabajo duro, ahora el sueño está a medio cumplirse, ya tengo mis propias gafas de sol, solo un coche deportivo, el sueño está a punto de hacerse realidad, ¡y me emociona un poco cuando lo pienso!
 Propietario| Publicado en 30/11/2014 18:28:24 |
Claramente no me insinuaste Publicado el 30-11-2014 a las 18:08
¿Qué quieres decir con que no lo entiendo?

Un rastreador de telarañas (también conocido como araña de telaraña, un bot de telarañas, más comúnmente llamado chaser de telarañas en la comunidad FOAF) es un programa o script que extrae automáticamente información sobre la World Wide Web según ciertas reglas. Otros nombres menos usados son hormigas, auto-indexes, emuladores o gusanos.
Publicado en 30/11/2014 17:40:16 |
Delver_Si Publicado el 30-11-2014 a las 17:22
Quiero escribir una herramienta para explotar mssql ftp y otras herramientas, pero no es fácil de usar online

¡Escríbelo, te cubro las espaldas!  Las herramientas de demolición suelen estar escritas en .net, y no hay muchas en Java, así que puedes escribir una en Java.
Publicado en 30/11/2014 17:19:07 |
¡Me vaya, esta es una buena marioneta para hacer una herramienta de hackeo!
Publicado en 30/11/2014 17:22:22 |
Yo lo recogí primero, aunque ahora ya no sirve para nada, ¡creo que me será útil en el futuro!
 Propietario| Publicado en 30/11/2014 17:22:42 |
Quiero escribir una herramienta para explotar mssql ftp y otras herramientas, pero no es fácil de usar online
Publicado en 30/11/2014 18:08:16 |
¿Qué quieres decir con que no lo entiendo?
 Propietario| Publicado en 30/11/2014 18:32:40 |
admin publicado el 30-11-2014 a las 17:40
¡Escríbelo, te cubro las espaldas!  Las herramientas de demolición suelen estar escritas en .net, y no hay muchas en Java, así que puedes escribir una en Java.

El bláster mssql del kit ni siquiera puede disparar al mío,
 Propietario| Publicado en 30/11/2014 18:33:09 |
Test publicado el 30-11-2014 a las 18:07
Al ver la noticia de que a Jack Ma le faltaban 300 millones para alcanzar a Li Ka-shing y convertirse en el hombre más rico de Asia, su corazón hizo clic y rápidamente comprobó su ranking en Internet, y básicamente no le afectó...

Eres el chaleco del webmaster, ¿verdad?"
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com