Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 29455|Svar: 11

[Java källkod] Java-versionen av webbsökaren

[Kopiera länk]
Publicerad på 2014-11-30 16:56:56 | | | |
[mw_shl_code=java, sant]/**
* @author Jack.Wang
*
*/
importera java.io.BufferedReader;
importera java.io.InputStreamReader;
importera java.net.URL;
importera java.util.ArrayList;
importera java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.regex.Matcher;
importera java.util.regex.Pattern;

Sök efter webbcrawlers
publik klass SearchCrawler implementerar Runnable {

/*
  * disallowListCache-cacheroboten tillåter inte sökbara URL:er. Robotprotokollet sätter en robots.txt fil i webbplatsens rotkatalog,
  * Specificerar vilka sidor på webbplatsen som är sökbara för begränsad sökning.
  * Sökprogrammet bör hoppa över dessa områden under sökningen, här är ett exempel på robots.txt:
  * # robots.txt för http://somehost.com/ User-agent:
  * Disallow: /cgi-bin/
  * Förbjud: /registrering # Förbjuder robotar på registreringssidan
  * Tillåt inte: /login
  */

privat HashMap<String, ArrayList<String>> disallowListCache = ny HashMap<String, ArrayList<String>>();
ArrayList<String> errorList = ny ArrayList<String>(); Felmeddelande
ArrayList-resultat<String> = ny ArrayList<String>(); Sökta resultat
String startUrl; En startpunkt för att starta din sökning
int maxUrl; Det maximala antalet behandlade URL:er
String searchString; Strängar att söka efter
boolean caseSensitive = falsk; Om man ska vara kasuskänslig eller inte
boolean limitHost = false; Om man ska söka inom en begränsad värd

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

public ArrayList<String> getResult() {
  återvändande resultat;
}

public void run() { // Starta söktråden
  crawl(startUrl, maxUrl, searchString, limitHost, caseSensitive);
}

Upptäck URL-formatering
privat URL verifyUrl(String url) {
  Endast HTTP-URL:er bearbetas.
  om (!url.toLowerCase().startsWith("http://"))
   återvända null;
  URL verifieradUrl = null;
  try {
   verifieradUrl = ny URL(url);
  } fångar (Undantag e) {
   återvända null;
  }
  returnerar verifieradUrl;
}

Känner av om roboten tillåter åtkomst till den givna URL:en.
privat boolean isRobotAllowed(URL urlToCheck) {
  String host = urlToCheck.getHost().toLowerCase(); Hämta värden som ger RUL
  System.out.println("host="+host);

  Skaffa en cache med URL:er som din värd inte tillåter att söka i
  ArrayList<String> disallowList = disallowListCache.get(host);

  Om du inte redan har en cache, ladda ner och cacha den.
  om (disallowList == null) {
   disallowList = ny ArrayList<String>();
   try {
    URL robotsFileUrl = ny URL ("http://" + host + "/robots.txt");
    BufferedReader reader = ny BufferedReader(
      ny InputStreamReader(robotsFileUrl.openStream()));

    Läs robotfilen för att skapa en lista över vägar som inte får nås.
    Stränglinje;
    medan ((linje = reader.readLine()) != null) {
     om (line.indexOf("Disallow:") == 0) {// Innehåller den "Disallow:"
      Sträng disallowPath = line.substring("Disallow:"
        .längd()); Få vägen för att förbjuda åtkomst

      Kontrollera efter anteckningar.
      int commentIndex = disallowPath.indexOf("#");
      om (commentIndex != -1) {
       disallowPath = disallowPath.substring(0,
         commentIndex); Ta bort kommentaren
      }

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

    Cachevägar som denna värd inte får komma åt.
    disallowListCache.put(host, disallowList);
   } fångar (Undantag e) {
    återvänd sant; Det finns inga robots.txt filer i webbplatsens rotkatalog, och den returnerar true
   }
  }

  Strängfil = urlToCheck.getFile();
  System.out.println("File getFile()="+file);
  för (int i = 0; i < disallowList.size(); i++) {
   String disallow = disallowList.get(i);
   if (file.startsWith(disallow)) {
    returnera falsk;
   }
  }

  återvänd sant;
}

privat String downloadPage(URL pageUrl) {
  try {
   Öppna länken till URL för läsning.
   BufferedReader reader = ny BufferedReader(ny InputStreamReader(
     pageUrl.openStream()));

   Läs sidan i bufferten.
   Stränglinje;
   StringBuffer pageBuffer = ny StringBuffer();
   medan ((linje = reader.readLine()) != null) {
    pageBuffer.append(rad);
   }

   return pageBuffer.toString();
  } fångar (Undantag e) {
  }

  återvända null;
}

Ta bort "www" från URL:en
privat Sträng removeWwwFromUrl(Sträng url) {
  int index = url.indexOf("://www.");
  om (index != -1) {
   returnera url.substring(0, index + 3) + url.substring(index + 7);
  }

  return (URL);
}

Genomsök sidan och hitta länken
privat ArrayList<String> hämtaLänkar(URL sidUrl, Sträng sidaInnehåll,
   HashSet crawledList, boolean limitHost) {
  Kompliéra matchningsmönstret för länken med reguljära uttryck.
  Mönster p = Pattern.compile("<a\\s+href\\s*=\\s*\\"?(. *?) [\"|>]",
    Pattern.CASE_INSENSITIVE);
  Matcher m = p.matcher(pageContents);

  ArrayList<String> linkList = ny ArrayList<String>();
  medan (m.find()) {
   Stränglänk = m.group(1).trim();

   if (link.length() < 1) {
    fortsätt;
   }

   Hoppa över länken till den här sidan.
   if (link.charAt(0) == '#') {
    fortsätt;
   }

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

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

   om (link.indexOf("://") == -1) {
    om (link.charAt(0) == '/') {// hanterar absolut
     länk = "http://" + pageUrl.getHost() + ":"
       + pageUrl.getPort() + länk;
    } annars {
     Strängfil = pageUrl.getFile();
     om (file.indexOf('/') == -1) {// hanterar relativa adresser
      länk = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + "/" + länk;
     } annars {
      Strängpath = file.substring(0,
        file.lastIndexOf('/') + 1);
      länk = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + sökväg + länk;
     }
    }
   }

   int index = link.indexOf('#');
   om (index != -1) {
    länk = länk.substring(0, index);
   }

   länk = ta bortWwwFromUrl(länk);

   URL verifieradLänk = verifieraUrl(länk);
   om (verifieradlänk == null) {
    fortsätt;
   }

   /* Om du begränsar värdar, exkludera de URL:er som inte uppfyller kriterierna */
   om (limitHost
     && !pageUrl.getHost().toLowerCase().equals(
       verifiedLink.getHost().toLowerCase())) {
    fortsätt;
   }

   Hoppa över de länkar som redan har behandlats.
   if (crawledList.contains(link)) {
    fortsätt;
   }

   linkList.add (länk);
  }

  återvända (linkList);
}

Sök i innehållet på en nedladdad webbsida för att avgöra om det finns en specificerad söksträng på sidan

privat boolesk sökningStringMatches(SträngsidaInnehåll,
   String searchString, boolean caseSensitive) {
  String searchContents = sidInnehåll;
  if (!caseSensitive) {// if case insensitive
   searchContents = pageContents.toLowerCase();
  }

  Pattern p = Pattern.compile("[\\s]+");
  String[]-termer = p.split(searchString);
  för (int i = 0; Jag < termer.längd; i++) {
   if (caseSensitive) {
    om (searchContents.indexOf(terms) == -1) {
     returnera falsk;
    }
   } annars {
    om (searchContents.indexOf(terms.toLowerCase()) == -1) {
     returnera falsk;
    }
   }
  }

  återvänd sant;
}

Utför själva sökoperationen
publik ArrayList<String> crawl(String startUrl, int maxUrls,
   String searchString, boolean limithost, boolean caseSensitive) {

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

  om (maxUrls < 1) {
   errorList.add ("Ogiltigt maxvärde för URL:er.");
   System.out.println("Ogiltigt Max-URL-värde.");
  }

  om (searchString.length() < 1) {
   errorList.add ("Saknad söksträng.");
   System.out.println ("Saknad söksträng");
  }

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

  Flytta www från start-URL:en
  startUrl = ta bortWwwFromUrl(startUrl);

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

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

   Få URL längst ner på listan.
   String url = toCrawlList.iterator().next();

   Ta bort URL från listan för att genomsöka sök.
   toCrawlList.remove(url);

   Konvertera sträng-url till URL-objekt.
   URL verifiedUrl = verifyUrl(url);

   Hoppa över URL om robotar inte får komma åt den.
   if (!isRobotAllowed(verifiedUrl)) {
    fortsätt;
   }

   Lägg till bearbetade URL:er i crawledList
   crawledList.add(url);
   Sträng pageContents = downloadPage(verifiedUrl);

   if (pageContents != null && pageContents.length() > 0) {
    Få en giltig länk från sidan
    <String> ArrayList-länkar = hämtarLänkar(verifieradUrl,
      pageContents, crawledList, limitHost);

    toCrawlList.addAll(länkar);

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

  }
  återvändande resultat;
}

Huvudfunktion
public static void main(String[] args) {
  SearchCrawler crawler = ny SearchCrawler ("http://www.itsvse.com/", 100,"Delver_Si");
  Trådsökning = ny tråd (crawler);
  System.out.println ("Börja söka...");
  System.out.println("result:");
  search.start();
  try {
   search.join();
  } fånga (InterruptedException e) {
   TODO Autogenererad fångstblock
   e.printStackTrace();
  }
}
}
[/mw_shl_code]

1.png (100.02 KB, Antal nedladdningar: 591)

2.png (72.18 KB, Antal nedladdningar: 596)

3.png (188.46 KB, Antal nedladdningar: 606)





Föregående:PHP står för 82,2 % av de största 100W-webbplatserna
Nästa:Java Edition Web Source Code Viewer
Publicerad på 2014-11-30 18:07:24 |
När jag såg nyheten att Jack Ma fortfarande var 300 miljoner från att hinna ikapp Li Ka-shing och bli Asiens rikaste man, skrattade jag tyst och kollade snabbt min ranking på internet, som i princip inte påverkades, och rankingen låg kvar på cirka 1,4 miljarder, nu är jag lättad! Faktum är att jag också är en person med drömmar, sedan jag var barn, drömde jag att jag en dag skulle köra en Lamborghini sportbil tillbaka till vår hemstad med solglasögon, efter nästan 20 års hårt arbete, nu är drömmen halvfull, jag har redan egna solglasögon, bara en sportbil, drömmen är på väg att bli verklighet, och jag blir lite exalterad när jag tänker på det!
 Hyresvärd| Publicerad på 2014-11-30 18:28:24 |

En webbcrawler (även känd som en web spider, en webbot, oftare kallad web chaser inom FOAF-gemenskapen) är ett program eller skript som automatiskt skrapar information om World Wide Web enligt vissa regler. Andra mindre vanliga namn är myror, auto-index, emulatorer eller maskar.
Publicerad på 2014-11-30 17:40:16 |
Delver_Si Publicerad den 2014-11-30 17:22
Jag vill skriva ett verktyg som kan explodera mssql ftp och andra verktyg, men det är inte lätt att använda online

Skriv det, jag har din rygg!  Rivningsverktyg är vanligtvis skrivna i .net, och det finns inte många i Java, så du kan skriva ett i Java!
Publicerad på 2014-11-30 17:19:07 |
Jag torkar, det här är en bra docka för att göra ett hackverktyg!
Publicerad på 2014-11-30 17:22:22 |
Jag samlade den först, även om den är värdelös nu, tror jag att den kommer att vara användbar i framtiden!
 Hyresvärd| Publicerad på 2014-11-30 17:22:42 |
Jag vill skriva ett verktyg som kan explodera mssql ftp och andra verktyg, men det är inte lätt att använda online
Publicerad på 2014-11-30 18:08:16 |
Vad menar du, jag förstår inte
 Hyresvärd| Publicerad på 2014-11-30 18:32:40 |
Admin postade den 2014-11-30 17:40
Skriv det, jag har din rygg!  Rivningsverktyg är vanligtvis skrivna i .net, och det finns inte många i Java, så du kan skriva ett i Java!

MSSQL-blastern i kitet kan inte ens skjuta min egen,
 Hyresvärd| Publicerad på 2014-11-30 18:33:09 |
Testet publicerades 2014-11-30 18:07
När han såg nyheten att Jack Ma fortfarande saknade 300 miljoner för att hinna ikapp Li Ka-shing och bli Asiens rikaste man, klickade hans hjärta och han kollade snabbt sin ranking på internet, och han påverkades i princip inte...

Du är webbansvarigs väst, eller hur?"
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com