Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 29455|Răspunde: 11

[Cod sursă Java] Versiunea Java a web crawler-ului

[Copiază linkul]
Postat pe 30.11.2014 16:56:56 | | | |
[mw_shl_code=java,true]/**
* @author Jack.Wang
*
*/
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

Caută crawlere web
clasa publică SearchCrawler implementează Runnable {

/*
  * robotul cache disallowListCache nu permite URL-uri căutate. Protocolul Robot setează un fișier robots.txt în directorul rădăcină al site-ului,
  * Specifică care pagini de pe site pot fi căutate pentru căutare restricționată.
  * Programul de căutare ar trebui să sară peste aceste zone în timpul căutării, iată un exemplu de robots.txt:
  * # robots.txt pentru http://somehost.com/ User-agent:
  * Interpermit: /cgi-bin/
  * Interpermite: /înregistrare # Interpermite roboții pe pagina de înregistrare
  * Disallow: /login
  */

private HashMap<String, ArrayList<String>> disallowListCache = new HashMap<String, ArrayList<String>>();
<String> ArrayList errorList = new <String>ArrayList(); Mesaj de eroare
<String> Rezultat ArrayList = nou <String>ArrayList(); Rezultate căutate
String startUrl; Un punct de plecare pentru a-ți începe căutarea
int maxUrl; Numărul maxim de URL-uri procesate
String searchString; Șiruri de căutat
boolean CaseSensitive = fals; Dacă să fie sau nu sensibil la majuscule și majuscule
boolean limitHost = fals; Dacă să cauți în interiorul unei gazde restricționate

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

public ArrayList<String> getResult() {
  rezultatul returnării;
}

public void run() { // Începe firul de căutare
  crawl(startUrl, maxUrl, searchString, limitHost, caseSensitive);
}

Detectează formatarea URL-urilor
URL privat verifyUrl(String url) {
  Sunt procesate doar URL-urile HTTP.
  if (!url.url.toLowerCase().startsWith("http://"))
   returnează nul;
  URL verificatUrl = null;
  try {
   verifiedUrl = URL nou (url);
  } prinde (Excepție e) {
   returnează nul;
  }
  return verifiedUrl;
}

Detectează dacă robotul permite accesul la URL-ul dat.
private boolean isRobotAllowed(URL urlToCheck) {
  String host = urlToCheck.getHost().toLowerCase(); Ia gazda care dă RUL
  System.out.println("host="+host);

  Obține un cache cu URL-uri pe care gazda ta nu le permite să le cauți
  ArrayList<String> disallowList = disallowListCache.get(host);

  Dacă nu ai deja un cache, descarcă-l și pune în cache.
  if (disallowList == null) {
   disallowList = new <String>ArrayList();
   try {
    URL robotsFileUrl = URL nou, ("http://" + host + "/robots.txt");
    BufferedReader cititor = nou BufferedReader(
      noul InputStreamReader(robotsFileUrl.openStream()));

    Citește fișierul robotului pentru a crea o listă de căi la care nu li se permite accesul.
    Linia de corzi;
    în timp ce ((linie = reader.readLine()) != null) {
     if (line.indexOf("Disallow:") == 0) {// Conține "Disallow:"
      String disallowPath = line.substring("Disallow:"
        .length()); Obține calea către accesul interzis

      Verifică dacă există adnotări.
      int commentIndex = disallowPath.indexOf("#");
      if (commentIndex != -1) {
       disallowPath = disallowPath.substring(0,
         Index de comentarii); Șterge comentariul
      }

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

    Căi cache la care această gazdă nu are voie să acceseze.
    disallowListCache.put (host, disallowList);
   } prinde (Excepție e) {
    întoarcerea cu adevărat; Nu există fișiere robots.txt în directorul rădăcină al site-ului, iar acesta returnează adevăratul
   }
  }

  Fișier șir = urlToCheck.getFile();
  System.out.println("File getFile()="+file);
  pentru (int i = 0; i < disallist.size(); i++) {
   String disallow = disallist.get(i);
   if (fișier.startsWith(disallow)) {
    returnează false;
   }
  }

  întoarcerea cu adevărat;
}

private String downloadPage(URL pageUrl) {
  try {
   Deschide conexiunea către URL pentru lectură.
   BufferedReader cititor = nou BufferedReader(nou InputStreamReader(
     pageUrl.openStream()));

   Citește pagina în buffer.
   Linia de corzi;
   StringBuffer pageBuffer = new StringBuffer();
   în timp ce ((linie = reader.readLine()) != null) {
    pageBuffer.append(linie);
   }

   return pageBuffer.toString();
  } prinde (Excepție e) {
  }

  returnează nul;
}

Elimină "www" din URL
private String removeWwwFromUrl(String url) {
  int index = url.indexOf("://www.");
  dacă (index != -1) {
   return url.substring(0, index + 3) + url.substring(index + 7);
  }

  return (url);
}

Analizează pagina și găsește linkul
ArrayList privat<String> retrieveLinks(URL paginăUrl, Șiruri de paginăConținut,
   HashSet crawledList, boolean limitHost) {
  Compilează modelul de potrivire al legăturii cu expresii regulate.
  Pattern p = Pattern.compile("<a\\s+href\\s*=\\s*\"?(. *?) [\"|>]",
    Pattern.CASE_INSENSITIVE);
  Matcher m = p.matcher(pageContents);

  <String> ArrayList linkList = new <String>ArrayList();
  în timp ce (m.find()) {
   Legătură de șir = m.group(1).trim();

   dacă (link.length() < 1) {
    continuă;
   }

   Săriți peste linkul către această pagină.
   if (link.charAt(0) == '#') {
    continuă;
   }

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

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

   if (link.indexOf("://") == -1) {
    if (link.charAt(0) == '/') {// gestionează absolut
     link = "http://" + pageUrl.getHost() + ":"
       + pageUrl.getPort() + link;
    } altfel {
     Fișier șir = pageUrl.getFile();
     if (file.indexOf('/') == -1) {// gestionează adresele relative
      link = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + "/" + link;
     } altfel {
      Calea șirului = fișier.substring(0,
        fișier.lastIndexOf('/') + 1);
      link = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + cale + link;
     }
    }
   }

   int index = link.indexOf('#');
   dacă (index != -1) {
    link = link.substring(0, index);
   }

   link = removeWwwFromUrl(link);

   URL verificatLink = verifyUrl(link);
   if (verifiedLink == null) {
    continuă;
   }

   /* Dacă restricționezi gazdele, exclude acele URL-uri care nu îndeplinesc criteriile */
   dacă (limitHost
     && !pageUrl.getHost().toLowerCase().egal(
       verifiedLink.getHost().toLowerCase())) {
    continuă;
   }

   Sari peste acele linkuri care au fost deja procesate.
   if (crawledList.contains(link)) {
    continuă;
   }

   linkList.add(link);
  }

  return (linkList);
}

Caută în conținutul unei pagini web descărcate pentru a determina dacă există un șir de căutare specificat în pagină

căutare booleană privatăStringMatches(String pageContents,
   String searchString, boolean caseSensitive) {
  StringSearchContents = pageContents;
  if (!caseSensitive) {// dacă insensitive la majuscule
   searchContents = pageContents.toLowerCase();
  }

  Pattern p = Pattern.compile("[\\s]+");
  String[] termeni = p.split(searchString);
  pentru (int i = 0; Am < termeni. lungime; i++) {
   if (caseSensitive) {
    if (searchContents.indexOf(termeni) == -1) {
     returnează false;
    }
   } altfel {
    if (searchContents.indexOf(termeni.toLowerCase()) == -1) {
     returnează false;
    }
   }
  }

  întoarcerea cu adevărat;
}

Efectuează operațiunea efectivă de căutare
public<String> ArrayList crawl(String startUrl, int maxUrls,
   String searchString, boolean limithost, boolean caseSensitive) {

  HashSet<String> crawledList = new <String>HashSet();
  LinkedHashSet<String> toCrawlList = nou <String>LinkedHashSet();

  if (maxUrls < 1) {
   errorList.add ("Invalid valoare a URL-urilor Max.");
   System.out.println ("Valoare URL maximă invalidă.");
  }

  if (searchString.length() < 1) {
   errorList.add ("Șir de căutare lipsă.");
   System.out.println ("String de căutare lipsă");
  }

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

  Mută www din URL-ul de start
  startUrl = removeWwwFromUrl(startUrl);

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

   dacă (maxUrls != -1) {
    if (crawledList.size() == maxUrls) {
     pauză;
    }
   }

   Obține URL-ul la finalul listei.
   URL string = toCrawlList.iterator().next();

   Elimină URL-ul din lista de crawl.
   toCrawlList.remove(url);

   Convertește URL-ul șirului în obiect URL.
   URL verificatUrl = verifyUrl(url);

   Sari peste URL-ul dacă roboții nu au voie să aibă acces la el.
   if (!isRobotAllowed(verifiedUrl)) {
    continuă;
   }

   Adaugă URL-uri procesate în crawledList
   crawledList.add(url);
   String pageConținut = downloadPage(verifiedUrl);

   if (pageContents != null && pageContents.length() > 0) {
    Obține un link valid de pe pagină
    <String> ArrayList links = retrieveLinks(verifiedUrl,
      pageContents, crawledList, limitHost);

    toCrawlList.addAll(linkuri);

    dacă (searchStringMatches(pageContents, searchString,
      Case Sensitive)) {
     result.add(url);
     System.out.println(url);
    }
   }

  }
  rezultatul returnării;
}

Funcția principală
public static void main(String[] args) {
  SearchCrawler crawler = nou SearchCrawler("http://www.itsvse.com/", 100,"Delver_Si");
  Căutare fire = fir nou (crawler);
  System.out.println ("Începe căutarea...");
  System.out.println("rezultat:");
  search.start();
  try {
   search.join();
  } prinde (ExcepțieÎntreruptăE) {
   TODO Bloc de prindere auto-generat
   e.printStackTrace();
  }
}
}
[/mw_shl_code]

1.png (100.02 KB, Numărul de descărcări: 591)

2.png (72.18 KB, Numărul de descărcări: 596)

3.png (188.46 KB, Numărul de descărcări: 606)





Precedent:PHP reprezintă 82,2% din primele site-uri 100W
Următor:Vizualizator de coduri sursă web Java Edition
Postat pe 30.11.2014 18:07:24 |
Văzând vestea că Jack Ma era încă la 300 de milioane distanță să-l ajungă din urmă pe Li Ka-shing și să devină cel mai bogat om din Asia, am râs în sinea mea și mi-am verificat rapid clasamentul pe Internet, care practic nu a fost afectat, iar clasamentul a rămas la aproximativ 1,4 miliarde, acum sunt ușurat! De fapt, și eu sunt o persoană cu vise, încă din copilărie am visat că într-o zi voi conduce o mașină sport Lamborghini înapoi în orașul nostru natal cu ochelari de soare, după aproape 20 de ani de muncă grea, acum visul este pe jumătate împlinit, am deja ochelari de soare, doar o mașină sport, visul este pe cale să devină realitate și sunt puțin entuziasmat când mă gândesc la el!
 Proprietarul| Postat pe 30.11.2014 18:28:24 |

Un crawler de pânză (cunoscut și sub denumirea de păianjen de pânză, bot de pânză, denumit mai des vânător de pânze în comunitatea FOAF) este un program sau un script care extrage automat informații despre World Wide Web, conform anumitor reguli. Alte denumiri mai puțin folosite sunt furnici, auto-indexe, emulatoare sau viermi.
Postat pe 30.11.2014 17:40:16 |
Delver_Si Postat la 30-11-2014, 17:22
Vreau să scriu un instrument care să explodeze mssql ftp și alte unelte, dar nu este ușor de folosit online

Scrie-o, te susțin!  Uneltele de demolare sunt, în general, scrise în .net, și nu sunt multe scrise în Java, așa că poți scrie unul în Java!
Postat pe 30.11.2014 17:19:07 |
Mă șterg, asta e o păpușă bună pentru a crea un instrument de hacking!
Postat pe 30.11.2014 17:22:22 |
Eu l-am adunat primul, deși acum nu mai folosește nimic, cred că va fi util pe viitor!
 Proprietarul| Postat pe 30.11.2014 17:22:42 |
Vreau să scriu un instrument care să explodeze mssql ftp și alte unelte, dar nu este ușor de folosit online
Postat pe 30.11.2014 18:08:16 |
Ce vrei să spui, nu înțeleg
 Proprietarul| Postat pe 30.11.2014 18:32:40 |
admin Postat la 2014-11-30, 17:40
Scrie-o, te susțin!  Uneltele de demolare sunt, în general, scrise în .net, și nu sunt multe scrise în Java, așa că poți scrie unul în Java!

Blasterul mssql din kit nici măcar nu poate să-l distrugă pe al meu,
 Proprietarul| Postat pe 30.11.2014 18:33:09 |
Test postat la 30-11-2014, 18:07
Văzând vestea că Jack Ma mai avea încă 300 de milioane distanță să-l ajungă din urmă pe Li Ka-shing pentru a deveni cel mai bogat om din Asia, inima i-a făcut un clic și și-a verificat rapid clasamentul pe Internet, practic nu a fost afectat...

Ești vesta webmasterului, nu-i așa?"
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com