Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 29455|Antwoord: 11

[Java Broncode] Java-versie van de webcrawler

[Link kopiëren]
Geplaatst op 30-11-2014 16:56:56 | | | |
[mw_shl_code=java, waar]/**
* @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;

Zoek naar webcrawlers
publieke klasse SearchCrawler implementeert Runnable {

/*
  * disallowListCache cache-robot staat geen doorzochten URL's toe. Het Robot-protocol zet een robots.txt bestand in de rootmap van de website,
  * Geeft aan welke pagina's op de site doorzoekbaar zijn voor beperkte zoekopdrachten.
  * Het zoekprogramma moet deze gebieden tijdens de zoekopdracht overslaan, hier is een voorbeeld van robots.txt:
  * # robots.txt voor http://somehost.com/ User-agent:
  * Niet toestaan: /cgi-bin/
  * Niet toestaan: /registratie # Robots niet toestaan op de registratiepagina
  * Niet toestaan: /login
  */

private HashMap<String, ArrayList<String>> disallowListCache = nieuwe HashMap<String, ArrayList<String>>();
ArrayList<String> errorList = nieuwe ArrayList<String>(); Foutmelding
ArrayList-resultaat<String> = nieuwe ArrayList<String>(); Geraadpleegde resultaten
String startUrl; Een startpunt om je zoektocht te beginnen
int maxUrl; Het maximale aantal verwerkte URL's
String searchString; Strings om naar te zoeken
boolean caseSensitive = valse; Of je nu hoofdlettergevoelig moet zijn of niet
boolean limitHost = vals; Of zoeken binnen een beperkte host

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

public ArrayList<String> getResult() {
  retourresultaat;
}

public void run() { // Start de zoekthread
  crawl(startUrl, maxUrl, searchString, limitHost, caseSensitive);
}

Detecteren URL-opmaak
private URL verifyUrl(String url) {
  Alleen HTTP-URL's worden verwerkt.
  if (!url.toLowerCase().startsWith("http://"))
   return null;
  URL verifiedUrl = null;
  try {
   verifiedUrl = nieuwe URL(url);
  } vangen (Uitzondering e) {
   return null;
  }
  return verifiedUrl;
}

Detecteert of de robot toegang geeft tot de opgegeven URL.
private boolean isRobotAllowed(URL urlToCheck) {
  String host = urlToCheck.getHost().toLowerCase(); Haal de host die de RUL geeft
  System.out.println("host="+host);

  Haal een cache van URL's die je host niet toestaat om te zoeken
  ArrayList<String> disallowList = disallowListCache.get(host);

  Als je nog geen cache hebt, download en cache hem dan.
  als (disallowList == null) {
   disallowList = nieuwe ArrayList<String>();
   try {
    URL robotsFileUrl = nieuwe URL ("http://" + host + "/robots.txt");
    BufferedReader reader = nieuwe BufferedReader(
      nieuwe InputStreamReader(robotsFileUrl.openStream()));

    Lees het robotbestand om een lijst te maken van paden die niet toegankelijk zijn.
    Snaarlijn;
    terwijl ((lijn = reader.readLine()) != null) {
     als (line.indexOf("Disallow:") == 0) {// Bevat het "Disallow:"
      String disallowPath = line.substring("Disallow:"
        .lengte()); Haal het pad naar verboden toegang

      Controleer op annotaties.
      int commentIndex = disallowPath.indexOf("#");
      if (commentIndex != -1) {
       disallowPath = disallowPath.substring(0,
         commentIndex); Verwijder de reactie
      }

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

    Cachepaden waar deze host geen toegang toe heeft.
    disallowListCache.put(host, disallowList);
   } vangen (Uitzondering e) {
    return true; Er zijn geen robots.txt bestanden in de rootmap van de website, en het geeft true terug
   }
  }

  String file = urlToCheck.getFile();
  System.out.println("Bestand getFile()="+bestand);
  voor (int i = 0; i < disallowList.size(); i++) {
   String disallow = disallowList.get(i);
   if (file.startsWith(disallow)) {
    return false;
   }
  }

  return true;
}

private String downloadPage(URL pageUrl) {
  try {
   Open de link naar de URL om te lezen.
   BufferedReader reader = nieuwe BufferedReader(nieuwe InputStreamReader(
     pageUrl.openStream()));

   Lees de pagina in de buffer.
   Snaarlijn;
   StringBuffer pageBuffer = nieuwe StringBuffer();
   terwijl ((lijn = reader.readLine()) != null) {
    pageBuffer.append(line);
   }

   return pageBuffer.toString();
  } vangen (Uitzondering e) {
  }

  return null;
}

Verwijder "www" uit de URL
private String removeWwwFromUrl(String url) {
  int index = url.indexOf("://www.");
  als (index != -1) {
   return url.substring(0, index + 3) + url.substring(index + 7);
  }

  return (url);
}

Ontleed de pagina en vind de link
privé ArrayList<String> retrieveLinks(URL pageUrl, String pageContents,
   HashSet crawledList, boolean limitHost) {
  Complimeer het matchingpatroon van de link met reguliere expressies.
  Patroon p = Patroon.compile("<a\\s+href\\s*=\\s*\"?(. *?) [\"|>]",
    Pattern.CASE_INSENSITIVE);
  Matcher m = p.matcher(pageContents);

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

   if (link.length() < 1) {
    Ga door;
   }

   Sla de link naar deze pagina over.
   if (link.charAt(0) == '#') {
    Ga door;
   }

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

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

   als (link.indexOf("://") == -1) {
    als (link.charAt(0) == '/') {// werkt absoluut
     link = "http://" + pageUrl.getHost() + ":"
       + pageUrl.getPort() + link;
    } anders {
     String file = pageUrl.getFile();
     als (file.indexOf('/') == -1) {// relatieve adressen verwerkt
      link = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + "/" + link;
     } anders {
      String path = file.substring(0,
        file.lastIndexOf('/') + 1);
      link = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + pad + link;
     }
    }
   }

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

   link = verwijderWwwFromUrl(link);

   URL geverifieerdLink = verifieerUrl(link);
   als (geverifieerdeLink == nul) {
    Ga door;
   }

   /* Als je hosts beperkt, sluit dan die URL's uit die niet aan de criteria voldoen */
   als (limitHost)
     && !pageUrl.getHost().toLowerCase().equals(
       verifiedLink.getHost().toLowerCase())) {
    Ga door;
   }

   Sla die links over die al zijn verwerkt.
   if (crawledList.contains(link)) {
    Ga door;
   }

   linkList.add (link);
  }

  return (linkList);
}

Zoek in de inhoud van een gedownloade webpagina om te bepalen of er een bepaalde zoekstring in de pagina zit

private boolean searchStringMatches(String pageContents,
   String searchString, boolean caseSensitive) {
  String searchContents = pageContents;
  if (!caseSensitive) {// if case insensitive
   searchContents = pageContents.toLowerLetter();
  }

  Patroon p = Patroon.compile("[\\s]+");
  String[]-termen = p.split(searchString);
  voor (int i = 0; Ik < termen.lengte; i++) {
   if (caseSensitive) {
    als (searchContents.indexOf(termen)) == -1) {
     return false;
    }
   } anders {
    als (searchContents.indexOf(termen).toLowerLetter()) == -1) {
     return false;
    }
   }
  }

  return true;
}

Voer de daadwerkelijke zoekoperatie uit
publieke ArrayList<String> crawl(String startUrl, int maxUrls,
   String searchString, boolean limithost, boolean caseSensitive) {

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

  if (maxUrls < 1) {
   errorList.add ("Ongeldige maximale URL-waarde.");
   System.out.println("Ongeldige maximale URL-waarde.");
  }

  als (searchString.length() < 1) {
   errorList.add ("Ontbrekende zoekstring.");
   System.out.println ("Ontbrekende zoekstring");
  }

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

  Verwijder www uit de start-URL
  startUrl = verwijderWwwFromUrl(startUrl);

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

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

   Haal de URL onderaan de lijst.
   String url = toCrawlList.iterator().next();

   Verwijder de URL uit de naar crawl-lijst.
   toCrawlList.remove(url);

   Converteer de string url naar een URL-object.
   URL verifiedUrl = verifyUrl(url);

   Sla de URL over als robots er niet bij mogen komen.
   if (!isRobotAllowed(verifiedUrl)) {
    Ga door;
   }

   Voeg verwerkte URL's toe aan de gecrawlde lijst
   crawledList.add (url);
   String pageContents = downloadPage(verifiedUrl);

   if (pageContents != null && pageContents.length() > 0) {
    Haal een geldige link van de pagina
    ArrayList-links<String> = retrieveLinks(verifiedUrl,
      pageContents, crawledList, limitHost);

    toCrawlList.addAll(links);

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

  }
  retourresultaat;
}

Hoofdfunctie
publieke statische void main(String[] args) {
  SearchCrawler crawler = nieuwe SearchCrawler ("http://www.itsvse.com/", 100,"Delver_Si");
  Thread search = nieuwe thread(crawler);
  System.out.println("Start zoeken...");
  System.out.println("resultaat:");
  search.start();
  try {
   search.join();
  } catch (InterruptedException e) {
   TODO Automatisch gegenereerd vangblok
   e.printStackTrace();
  }
}
}
[/mw_shl_code]

1.png (100.02 KB, Aantal downloads: 591)

2.png (72.18 KB, Aantal downloads: 596)

3.png (188.46 KB, Aantal downloads: 606)





Vorig:PHP is goed voor 82,2% van de top 100W websites
Volgend:Java Edition Web Broncode Viewer
Geplaatst op 30-11-2014 18:07:24 |
Toen ik het nieuws zag dat Jack Ma nog 300 miljoen verwijderd was van het inhalen van Li Ka-shing om de rijkste man van Azië te worden, moest ik grinniken en snel mijn ranking op internet controleren, die vrijwel niet werd beïnvloed, en die positie bleef ongeveer 1,4 miljard, nu ben ik opgelucht! Eigenlijk ben ik ook iemand met dromen, sinds ik een kind was, droomde ik dat ik op een dag met een zonnebril met een Lamborghini sportwagen terug naar onze geboorteplaats zou rijden, na bijna 20 jaar hard werken, nu is de droom half uitgekomen, ik heb al mijn eigen zonnebril, alleen een sportwagen, de droom staat op het punt werkelijkheid te worden, en ik word een beetje opgewonden als ik eraan denk!
 Huisbaas| Geplaatst op 30-11-2014 18:28:24 |

Een web crawler (ook bekend als een web spider, een webbot, vaker een web chaser genoemd in de FOAF-gemeenschap) is een programma of script dat automatisch informatie over het World Wide Web scrapt volgens bepaalde regels. Andere minder vaak gebruikte namen zijn mieren, auto-indexes, emulators of wormen.
Geplaatst op 30-11-2014 17:40:16 |
Delver_Si Geplaatst op 30-11-2014 17:22
Ik wil een tool schrijven om mssql ftp en andere tools te laten exploderen, maar het is niet makkelijk online te gebruiken

Schrijf het, ik sta achter je!  Slooptools worden over het algemeen geschreven in .net, en er zijn er niet veel in Java, dus je kunt er een in Java schrijven!
Geplaatst op 30-11-2014 17:19:07 |
Ik veeg, dit is een goede pop om een hackgereedschap te maken!
Geplaatst op 30-11-2014 17:22:22 |
Ik verzamelde het eerst, hoewel het nu nutteloos is, geloof ik dat het in de toekomst nuttig zal zijn!
 Huisbaas| Geplaatst op 30-11-2014 17:22:42 |
Ik wil een tool schrijven om mssql ftp en andere tools te laten exploderen, maar het is niet makkelijk online te gebruiken
Geplaatst op 30-11-2014 18:08:16 |
Wat bedoel je, ik begrijp het niet
 Huisbaas| Geplaatst op 30-11-2014 18:32:40 |
Admin geplaatst op 30-11-2014 17:40
Schrijf het, ik sta achter je!  Slooptools worden over het algemeen geschreven in .net, en er zijn er niet veel in Java, dus je kunt er een in Java schrijven!

De mssql-blaster in de kit kan zelfs mijn eigen wapen niet opjagen,
 Huisbaas| Geplaatst op 30-11-2014 18:33:09 |
Test geplaatst op 30-11-2014 18:07
Toen hij het nieuws zag dat Jack Ma nog 300 miljoen tekort kwam om Li Ka-shing in te halen en de rijkste man van Azië te worden, sloeg het op zijn plek, en hij controleerde snel zijn ranking op internet, en hij was er eigenlijk niet door beïnvloed...

Jij bent het vest van de webmaster, nietwaar?"
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com