Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 29455|Répondre: 11

[Code source Java] Version Java du robot d’analyse web

[Copié le lien]
Publié sur 30/11/2014 16:56:56 | | | |
[mw_shl_code=java,true]/**
* @author Jack.Wang
*
*/
importer java.io.BufferedReader ;
importer java.io.InputStreamReader ;
importez java.net.URL ;
import java.util.ArrayList ;
importer java.util.HashMap ;
importer java.util.HashSet ;
importer java.util.LinkedHashSet ;
import java.util.regex.Matcher ;
importer java.util.regex.Pattern ;

Recherche de robots d’indexation web
Public Class SearchCrawler implémente Runnable {

/*
  * disallowListCache cache robot n’autorise pas les URL recherchées. Le protocole Robot place un fichier robots.txt dans le répertoire racine du site web,
  * Spécifie quelles pages du site sont consultables pour une recherche restreinte.
  * Le programme de recherche doit sauter ces zones pendant la recherche, voici un exemple de robots.txt :
  * # robots.txt pour http://somehost.com/ User-agent :
  * Refuser : /cgi-bin/
  * Interautoriser : /registration # Interpermettre les robots sur la page d’inscription
  * Refuser : /login
  */

private HashMap<String, ArrayList<String>> disallowListCache = new HashMap<String, <String>ArrayList>() ;
<String> ArrayList errorList = new ArrayList<String>() ; Message d’erreur
<String> Résultat ArrayList = new <String>ArrayList() ; Résultats recherchés
String startUrl ; Un point de départ pour commencer votre recherche
int maxUrl ; Le nombre maximal d’URL traitées
Recherche de chaînesChaîne ; Sources à rechercher
booléenSensible à la casse = faux ; Savoir s’il faut ou non être sensible à la casse
limitHôte booléen = faux ; Savoir s’il faut chercher dans un hôte restreint

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

public ArrayList<String> getResult() {
  résultat de retour ;
}

public void run() { // Lancer le fil de recherche
  crawl(startUrl, maxUrl, searchString, limitHost, case sensitive) ;
}

Détecter la mise en forme d’URL
private URL verifyUrl(String url) {
  Seules les URL HTTP sont traitées.
  if ( !url.url.toLowerCase().startsWith(« http:// »))
   retourner nul ;
  URL vérifiéeUrl = null ;
  try {
   verifiedUrl = nouvelle URL(URL) ;
  } catch (Exception e) {
   retourner nul ;
  }
  return verifiedUrl ;
}

Détecte si le robot permet d’accéder à l’URL donnée.
private boolean isRobotAllowed(URL urlToCheck) {
  Chaîne hôte = urlToCheck.getHost().toLowerCase() ; Prends l’hôte qui donne le RUL
  System.out.println(« host="+host) ;

  Obtenez un cache d’URL que votre hébergeur ne permet pas de rechercher
  ArrayList<String> disallowList = disallowListCache.get(host) ;

  Si vous n’avez pas déjà de cache, téléchargez-le et mettez-le en cache.
  if (disallowList == null) {
   disallowList = nouvelle <String>ArrayList() ;
   try {
    URL robotsFileUrl = nouvelle URL (« http:// » + hôte + « /robots.txt ») ;
    Lecteur Tamponné = nouveau LecteurDeTamponné (
      le nouveau InputStreamReader(robotsFileUrl.openStream()) ;

    Lisez le fichier robot pour créer une liste de chemins qui ne sont pas autorisés à accéder.
    Ligne de cordes ;
    tandis que ((ligne = lecteur.readLine()) != null) {
     if (line.indexOf(« Disallow : ») == 0) {// Contienne-t-elle « Disallow » :
      String disallowPath = line.substring(« Disallow : »
        .longueur()) ; Obtenez le chemin vers l’accès interdit

      Vérifiez les annotations.
      int commentIndex = disallowPath.indexOf(« # ») ;
      if (commentIndex != -1) {
       disallowPath = disallowPath.sous-string(0,
         commentaireIndex) ; Supprimer le commentaire
      }

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

    Des chemins de cache auxquels cet hôte n’est pas autorisé à accéder.
    disallowListCache.put (host, disallowList) ;
   } catch (Exception e) {
    retour fidèle ; Il n’y a pas de fichiers robots.txt dans le répertoire racine du site, et il retourne true
   }
  }

  Chaîne de fichiers = urlToCheck.getFile() ;
  System.out.println (« File getFile()="+file) ;
  pour (int i = 0 ; i < disallist.size() ; i++) {
   Chaîne disallow = disallowList.get(i) ;
   if (file.startsWith(disallow)) {
    return false ;
   }
  }

  retour fidèle ;
}

private String downloadPage(URL pageUrl) {
  try {
   Connexion ouverte vers l’URL pour la lecture.
   Lecteur Lecteur Tamponné = nouveau LecteurLecteur Tamponné (nouveau LecteurStreamInput(
     pageUrl.openStream()) ;

   Lisez la page dans le tampon.
   Ligne de cordes ;
   StringBuffer pageBuffer = nouveau StringBuffer() ;
   tandis que ((ligne = lecteur.readLine()) != null) {
    pageBuffer.append(ligne) ;
   }

   return pageBuffer.toString() ;
  } catch (Exception e) {
  }

  retourner nul ;
}

Supprimez « www » de l’URL
private String removeWwwFromUrl(String url) {
  int index = url.indexOf(« ://www. ») ;
  si (index != -1) {
   return url.sous-string(0, index + 3) + url.sous-string(index + 7) ;
  }

  retour (URL) ;
}

Analysez la page et trouvez le lien
ArrayList privé<String> retrieveLinks(URL pageUrl, Chaîne pageContenus,
   HashSet crawledList, boolean limitHost) {
  Compiler le motif correspondant du lien avec des expressions régulières.
  Pattern p = Pattern.compile(« <a\\s+href\\s*=\\s*\ » ?(. *?) [\"|>]",
    Pattern.CASE_INSENSITIVE) ;
  Matcher m = p.matcher(pageContents) ;

  <String> ArrayList linkList = new <String>ArrayList() ;
  tandis que (m.find()) {
   Lien de chaîne = m.group(1).trim() ;

   si (link.length() < 1) {
    continuer ;
   }

   Passez le lien vers cette page.
   if (link.charAt(0) == '#') {
    continuer ;
   }

   if (link.indexOf(« mailto : ») != -1) {
    continuer ;
   }

   if (link.toLowerCase().indexOf(« javascript ») != -1) {
    continuer ;
   }

   if (link.indexOf(« :// ») == -1) {
    if (link.charAt(0) == '/') {// gère absolument
     lien = « http:// » + pageUrl.getHost() + « : »
       + pageUrl.getPort() + lien ;
    } else {
     Fichier chaîne = pageUrl.getFile() ;
     if (file.indexOf('/') == -1) {// gère les adresses relatives
      lien = « http:// » + pageUrl.getHost() + « : »
        + pageUrl.getPort() + « / » + lien ;
     } else {
      Chemin de chaîne = fichier.sous-chaîne(0,
        file.lastIndexOf('/') + 1) ;
      lien = « http:// » + pageUrl.getHost() + « : »
        + pageUrl.getPort() + chemin + lien ;
     }
    }
   }

   int index = link.indexOf('#') ;
   si (index != -1) {
    lien = lien.sous-string(0, index) ;
   }

   lien = removeWwwFromUrl(lien) ;

   URL vérifiéeLink = verifyUrl(lien) ;
   if (verifiedLink == null) {
    continuer ;
   }

   /* Si vous restreignez les hôtes, excluez les URL qui ne remplissent pas les critères */
   if (limitHost
     && !pageUrl.getHost().toLowerCase().equals(
       verifiedLink.getHost().toLowerCase())) {
    continuer ;
   }

   Ignorez les liens déjà traités.
   if (crawledList.contains(link)) {
    continuer ;
   }

   linkList.add(lien) ;
  }

  return (lienList) ;
}

Recherchez le contenu d’une page web téléchargée pour déterminer s’il existe une chaîne de recherche spécifiée dans la page

recherche booléenne privéeStringMatches(String pageContents,
   String searchString, boolean caseSensitive) {
  Recherche de chaîne Contenus = pageContenu ;
  if ( !casSensible) {// si insensible à la casse
   rechercheContenusT= pageContenus.versMinuscule() ;
  }

  Pattern p = Pattern.compile(« [\\s]+ ») ;
  Termes String[] = p.split(searchString) ;
  pour (int i = 0 ; J’ai < termes. Longueur ; i++) {
   if (majusculeSensible) {
    if (searchContents.indexOf(termes) == -1) {
     return false ;
    }
   } else {
    if (searchContents.indexOf(termes.toLowerCase()) == -1) {
     return false ;
    }
   }
  }

  retour fidèle ;
}

Effectuer l’opération de recherche proprement dite
public<String> ArrayList crawl(String startUrl, int maxUrls,
   String searchString, boolean limithost, boolean caseSensitive) {

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

  if (maxUrls < 1) {
   errorList.add (« Invalid Max URLs value. ») ;
   System.out.println (« Valeur des URL Max invalides. ») ;
  }

  if (searchString.length() < 1) {
   errorList.add (« Chaîne de recherche manquante. ») ;
   System.out.println (« Chaîne de recherche manquante ») ;
  }

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

  Déplacer www depuis le début de l’URL
  startUrl = removeWwwFromUrl(startUrl) ;

  toCrawlList.add(startUrl) ;
  tandis que (toCrawlList.size() > 0) {

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

   Obtenez l’URL en bas de la liste.
   URL de chaîne = toCrawlList.iterator().next() ;

   Supprime l’URL de la liste de recherche.
   toCrawlList.remove(url) ;

   Convertir l’URL de chaîne en objet URL.
   URL vérifiéeURL = verifyUrl(url) ;

   Passez l’URL si les robots ne sont pas autorisés à y accéder.
   if ( !isRobotAllowed(verifiedUrl)) {
    continuer ;
   }

   Ajouter les URL traitées à crawledList
   crawledList.add(url) ;
   Chaîne de pagesContenu = downloadPage(verifiedUrl) ;

   if (pageContents != null && pageContents.length() > 0) {
    Obtenez un lien valide depuis la page
    <String> ArrayList liens = retrieveLinks(verifiedUrl,
      pageContents, crawledList, limitHost) ;

    toCrawlList.addAll(liens) ;

    si (searchStringMatches(pageContents, searchString,
      Majusculessensible)) {
     résult.add(url) ;
     System.out.println(url) ;
    }
   }

  }
  résultat de retour ;
}

Fonction principale
public static void main(String[] args) {
  SearchCrawler crawler = nouveau SearchCrawler (« http://www.itsvse.com/ », 100,"Delver_Si ») ;
  Recherche de fils = nouveau Fil (crawler) ;
  System.out.println (« Commencer la recherche... ») ;
  System.out.println (« résultat : ») ;
  recherche.start() ;
  try {
   recherche.join() ;
  } catch (InterruptedException e) {
   TODO Bloc de capture auto-généré
   e.printStackTrace() ;
  }
}
}
[/mw_shl_code]

1.png (100.02 KB, Nombre de téléchargements: 591)

2.png (72.18 KB, Nombre de téléchargements: 596)

3.png (188.46 KB, Nombre de téléchargements: 606)





Précédent:PHP représente 82,2 % des sites 100W les plus populaires
Prochain:Visualiseur de code source Web Java Edition
Publié sur 30/11/2014 18:07:24 |
En voyant la nouvelle que Jack Ma était encore à 300 millions de rattraper Li Ka-shing pour devenir l’homme le plus riche d’Asie, j’ai ri intérieurement et j’ai rapidement vérifié mon classement sur Internet, qui n’a pratiquement pas été affecté, et le classement est resté autour de 1,4 milliard, maintenant je suis soulagé ! En fait, je suis aussi une personne avec des rêves, depuis que je suis enfant, j’ai rêvé qu’un jour je conduirais une Lamborghini de sport pour rentrer dans notre ville natale avec des lunettes de soleil, après près de 20 ans de travail acharné, maintenant le rêve est à moitié réalisé, j’ai déjà mes propres lunettes de soleil, seulement une voiture de sport, le rêve est sur le point de devenir réalité, et j’en suis un peu excité quand j’y pense !
 Propriétaire| Publié sur 30/11/2014 18:28:24 |

Un robot d’indexation web (également appelé araignée de toile, bot de toile, plus souvent appelé chasseur de toile dans la communauté FOAF) est un programme ou un script qui extrait automatiquement des informations sur le Web selon certaines règles. D’autres noms moins couramment utilisés sont fourmis, auto-index, émulateurs ou vers.
Publié sur 30/11/2014 17:40:16 |
Delver_Si Publié le 30-11-2014 à 17:22
Je veux écrire un outil pour faire exploser mssql ftp et d’autres outils, mais ce n’est pas facile à utiliser en ligne

Écris-le, je te couvre !  Les outils de démolition sont généralement écrits en .net, et il n’y en a pas beaucoup en Java, donc vous pouvez en écrire un en Java !
Publié sur 30/11/2014 17:19:07 |
Je fais un wipe de jeu, c’est une bonne marionnette pour créer un outil de piratage !
Publié sur 30/11/2014 17:22:22 |
Je l’ai ramassé en premier, même s’il est inutile maintenant, je pense qu’il sera utile à l’avenir !
 Propriétaire| Publié sur 30/11/2014 17:22:42 |
Je veux écrire un outil pour faire exploser mssql ftp et d’autres outils, mais ce n’est pas facile à utiliser en ligne
Publié sur 30/11/2014 18:08:16 |
Que veux-tu dire par je ne comprends pas
 Propriétaire| Publié sur 30/11/2014 18:32:40 |
admin publié le 30-11-2014 à 17:40
Écris-le, je te couvre !  Les outils de démolition sont généralement écrits en .net, et il n’y en a pas beaucoup en Java, donc vous pouvez en écrire un en Java !

Le blaster mssql dans le kit ne peut même pas tirer sur le mien,
 Propriétaire| Publié sur 30/11/2014 18:33:09 |
Test publié le 30/11/2014 à 18:07
En voyant la nouvelle que Jack Ma avait encore 300 millions de moins pour rattraper Li Ka-shing et devenir l’homme le plus riche d’Asie, son cœur s’est accéléré, il a rapidement vérifié son classement sur Internet, et il n’a pratiquement pas été affecté...

Tu es le gilet du webmaster, n’est-ce pas ? »
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com