Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 29455|Risposta: 11

[Codice sorgente Java] Versione Java del web crawler

[Copiato link]
Pubblicato su 30/11/2014 16:56:56 | | | |
[mw_shl_code=java,true]/**
* @author Jack.Wang
*
*/
importa java.io.BufferedReader;
importare java.io.InputStreamReader;
importa java.net.URL;
import java.util.ArrayList;
importare java.util.HashMap;
importa java.util.HashSet;
importa java.util.LinkedHashSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

Cerca i web crawler
SearchCrawler di classe pubblica implementa Runnable {

/*
  * disallowListCache cache robot non consente URL cercati. Il protocollo Robot imposta un file robots.txt nella directory radice del sito web,
  * Specifica quali pagine del sito sono ricercabili per la ricerca restritta.
  * Il programma di ricerca dovrebbe saltare queste aree durante la ricerca, ecco un esempio di robots.txt:
  * # robots.txt per http://somehost.com/ User-agent:
  * Vieta: /cgi-bin/
  * Dispermetto: /registrazione # Dispermesso i robot nella pagina di registrazione
  * Disalconsent: /login
  */

private HashMap<String, ArrayList<String>> disallowListCache = new HashMap<String, ArrayList<String>>();
<String> ArrayList errorList = nuovo ArrayList<String>(); Messaggio di errore
<String> Risultato ArrayList = nuovo <String>ArrayList(); Risultati ricercati
Stringa startUrl; Un punto di partenza per iniziare la tua ricerca
int maxUrl; Il numero massimo di URL processati
String searchString; Stringhe da cercare
boolean caseSensitive = falso; Se essere sensibili o meno alle maiuscole e minuscole
limiteHost booleano = falso; Se cercare all'interno di un host ristretto

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

public ArrayList<String> getResult() {
  risultato di ritorno;
}

public void run() { // Avvia il thread di ricerca
  crawl(startUrl, maxUrl, searchString, limitHost, caseSensitive);
}

Rileva la formattazione URL
private URL verifyUrl(String url) {
  Vengono elaborati solo gli URL HTTP.
  if (!url.toLowerCase().startsWith("http://"))
   return null;
  URL verifiedUrl = null;
  try {
   verifiedUrl = nuovo URL(URL);
  } catch (Eccezione e) {
   return null;
  }
  return verifiedUrl;
}

Rileva se il robot consente l'accesso all'URL fornito.
private boolean isRobotAllowed(URL urlToCheck) {
  String host = urlToCheck.getHost().toLowerCase(); Prendi l'host che dà la RUL
  System.out.println("host="+host);

  Ottieni una cache di URL che il tuo host non permette di cercare
  ArrayList<String> disallowList = disallowListCache.get(host);

  Se non hai già una cache, scaricala e mettila in cache.
  if (disallowList == null) {
   disallowList = nuova ArrayList<String>();
   try {
    URL robotsFileUrl = nuovo URL("http://" + host + "/robots.txt");
    Lettore BufferedReader = nuovo LettoreBuffered(
      nuovo InputStreamReader(robotsFileUrl.openStream()));

    Leggi il file robot per creare una lista di percorsi che non sono accessibili.
    Linea d'archi;
    mentre ((linea = lettore.readLine()) != nullo) {
     if (line.indexOf("Disallow:") == 0) {// Contiene "Disallow:"
      String disallowPath = line.substring("Disallow:"
        .length()); Ottieni il percorso per l'accesso non consentito

      Controlla le annotazioni.
      int commentIndex = disallowPath.indexOf("#");
      if (commentIndex != -1) {
       disallowPath = disallowPath.sottostringa(0,
         commentoIndice); Rimuovi il commento
      }

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

    Percorsi di cache a cui questo host non è autorizzato a accedere.
    disallowListCache.put (host, disallowList);
   } catch (Eccezione e) {
    ritorno vero; Non ci sono file robots.txt nella directory root del sito web, e restituisce la risposta vera
   }
  }

  File stringa = urlToCheck.getFile();
  System.out.println("File getFile()="+file);
  per (int i = 0; i < disallowList.size(); i++) {
   Stringa disallow = disallowList.get(i);
   if (file.startsWith(disallow)) {
    return false;
   }
  }

  ritorno vero;
}

private Stringa downloadPage(URL pageUrl) {
  try {
   Apertura del collegamento all'URL per la lettura.
   BufferedReader reader = nuovo BufferedReader(nuovo InputStreamReader(
     pageUrl.openStream()));

   Leggi la pagina nel buffer.
   Linea d'archi;
   StringBuffer pageBuffer = nuovo StringBuffer();
   mentre ((linea = lettore.readLine()) != nullo) {
    pageBuffer.append(linea);
   }

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

  return null;
}

Rimuovi "www" dall'URL
private StringeRemoveWwwFromUrl(String url) {
  int index = url.indexOf("://www.");
  se (indice != -1) {
   return url.substring(0, indice + 3) + url.sottostringa(indice + 7);
  }

  return (url);
}

Analizza la pagina e trova il link
private ArrayList<String> retrieveLinks(URL paginaUrl, Stringa paginaContenuti,
   HashSet crawledList, boolean limitHost) {
  Compila il pattern corrispondente del link con espressioni regolari.
  Pattern p = Pattern.compile("<a\\s+href\\s*=\\s*\"?(. *?) [\"|>]",
    Pattern.CASE_INSENSITIVE);
  Matcher m = p.matcher(pageContents);

  <String> ArrayList linkList = nuovo <String>ArrayList();
  mentre (m.find()) {
   String link = m.group(1).trim();

   se (link.length() < 1) {
    continuare;
   }

   Salta il link a questa pagina.
   if (link.charAt(0) == '#') {
    continuare;
   }

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

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

   if (link.indexOf("://") == -1) {
    if (link.charAt(0) == '/') {// gestisce assolutamente
     link = "http://" + pageUrl.getHost() + ":"
       + pageUrl.getPort() + link;
    } altrimenti {
     String file = pageUrl.getFile();
     if (file.indexOf('/') == -1) {// gestisce gli indirizzi relativi
      link = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + "/" + link;
     } altrimenti {
      Percorso stringa = file.sottostringa(0,
        file.lastIndexOf('/') + 1);
      link = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + percorso + collegamento;
     }
    }
   }

   int index = link.indexOf('#');
   se (indice != -1) {
    link = link.sottostringa(0, indice);
   }

   link = removeWwwFromUrl(link);

   URL verificatoLink = verifyUrl(link);
   if (verifiedLink == null) {
    continuare;
   }

   /* Se limiti gli host, escludi quegli URL che non soddisfano i criteri */
   if (limitHost
     && !pageUrl.getHost().toLowerCase().equals(
       verifiedLink.getHost().toLowerCase())) {
    continuare;
   }

   Evita quei link già elaborati.
   if (crawledList.contains(link)) {
    continuare;
   }

   linkList.add(link);
  }

  return (linkList);
}

Cerca nel contenuto di una pagina web scaricata per determinare se nella pagina è presente una stringa di ricerca specifica

ricerca booleana privataStringMatches(StringpageContenuti,
   StringStringSearch, boolean caseSensitive) {
  Stringa ricercaContenuti = paginaContenuti;
  if (!caseSensitive) {// if case insensitive
   searchContents = paginaContenuti.aMinuscolo();
  }

  Pattern p = Pattern.compile("[\\s]+");
  String[] termini = p.split(searchString);
  per (int i = 0; Ho < termini lunghi; i++) {
   if (Case Sensitive) {
    if (searchContents.indexOf(termini) == -1) {
     return false;
    }
   } altrimenti {
    if (searchContents.indexOf(termini.toLowerCase()) == -1) {
     return false;
    }
   }
  }

  ritorno vero;
}

Esegui l'operazione di ricerca effettiva
public<String> ArrayList crawl(String startUrl, int maxUrls,
   StringstringSearchString, boolean limithost, boolean caseSensitive) {

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

  if (maxUrls < 1) {
   errorList.add("Invalido valore degli URL Max.");
   System.out.println ("Valore Max URL invalido.");
  }

  se (searchString.length() < 1) {
   errorList.add ("Stringa di ricerca mancante.");
   System.out.println ("Stringa di ricerca mancante");
  }

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

  Sposta www dall'URL iniziale
  startUrl = removeWwwFromUrl(startUrl);

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

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

   Trova l'URL in fondo alla lista.
   URL stringa = toCrawlList.iterator().next();

   Rimuovi l'URL dalla lista di rastrellamento.
   toCrawlList.remove(url);

   Converti l'URL della stringa in oggetto URL.
   URL verifiedUrl = verifyUrl(url);

   Salta l'URL se ai robot non è permesso accedervi.
   if (!isRobotAllowed(verifiedUrl)) {
    continuare;
   }

   Aggiungi gli URL elaborati a crawledList
   crawledList.add(url);
   Stringa paginaContenuti = downloadPage(verifiedUrl);

   if (pageContents != null && pageContents.length() > 0) {
    Ottieni un link valido dalla pagina
    <String> ArrayList link = retrieveLinks(verifiedUrl,
      pageContents, crawledList, limitHost);

    toCrawlList.addAll(link);

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

  }
  risultato di ritorno;
}

Funzione principale
Public static void main(String[] args) {
  SearchCrawler crawler = nuovo SearchCrawler("http://www.itsvse.com/", 100,"Delver_Si");
  Thread search = nuovo thread(crawler);
  System.out.println ("Inizia la ricerca...");
  System.out.println("risultato:");
  search.start();
  try {
   cerca.join();
  } catch (InterruptedException e) {
   TODO blocco di presa auto-generato
   e.printStackTrace();
  }
}
}
[/mw_shl_code]

1.png (100.02 KB, Numero di download: 591)

2.png (72.18 KB, Numero di download: 596)

3.png (188.46 KB, Numero di download: 606)





Precedente:PHP rappresenta l'82,2% dei principali siti web di 100W
Prossimo:Visualizzatore di codice sorgente web Java Edition
Pubblicato su 30/11/2014 18:07:24 |
Vedendo la notizia che Jack Ma era ancora a 300 milioni dal raggiungere Li Ka-shing per diventare l'uomo più ricco d'Asia, ho riso tra me e ho controllato rapidamente la mia classifica su Internet, che praticamente non era cambiata, e la classifica era rimasta intorno a 1,4 miliardi, ora sono sollevato! In effetti, sono anche una persona con sogni, fin da bambino ho sognato che un giorno avrei guidato una Lamborghini per tornare nella nostra città natale con gli occhiali da sole, dopo quasi 20 anni di duro lavoro, ora il sogno è a metà realizzato, ho già i miei occhiali da sole, solo una sportiva, il sogno sta per diventare realtà, e sono un po' entusiasta quando ci penso!
 Padrone di casa| Pubblicato su 30/11/2014 18:28:24 |

Un web crawler (noto anche come web spider, web bot, più spesso chiamato web chaser nella comunità FOAF) è un programma o uno script che raccoglie automaticamente informazioni sul World Wide Web secondo determinate regole. Altri nomi meno comunemente usati sono formiche, auto-indici, emulatori o vermi.
Pubblicato su 30/11/2014 17:40:16 |
Delver_Si Pubblicato il 30-11-2014 alle 17:22
Voglio scrivere uno strumento per far esplodere mssql ftp e altri strumenti, ma non è facile da usare online

Scrivilo, ti copro le spalle!  Gli strumenti di demolizione sono generalmente scritti in .net, e non ce ne sono molti scritti in Java, quindi puoi scriverne uno in Java!
Pubblicato su 30/11/2014 17:19:07 |
Mi sono pulito, questo è un buon burattino per creare uno strumento di hacking!
Pubblicato su 30/11/2014 17:22:22 |
L'ho raccolto per primo, anche se ora è inutile, credo che sarà utile in futuro!
 Padrone di casa| Pubblicato su 30/11/2014 17:22:42 |
Voglio scrivere uno strumento per far esplodere mssql ftp e altri strumenti, ma non è facile da usare online
Pubblicato su 30/11/2014 18:08:16 |
Cosa intendi, non capisco
 Padrone di casa| Pubblicato su 30/11/2014 18:32:40 |
admin pubblicato il 30-11-2014 alle 17:40
Scrivilo, ti copro le spalle!  Gli strumenti di demolizione sono generalmente scritti in .net, e non ce ne sono molti scritti in Java, quindi puoi scriverne uno in Java!

Il blaster mssql nel kit non può nemmeno colpire il mio,
 Padrone di casa| Pubblicato su 30/11/2014 18:33:09 |
Test pubblicato il 30-11-2014 alle 18:07
Vedendo la notizia che Jack Ma era ancora a 300 milioni di distanza per raggiungere Li Ka-shing e diventare l'uomo più ricco d'Asia, il suo cuore scattò, controllò rapidamente la sua posizione su Internet, e praticamente non ne fu colpito...

Sei il giubbotto del webmaster, vero?"
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com