Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 29455|Odpověď: 11

[Java zdrojový kód] Java verze webového crawleru

[Kopírovat odkaz]
Zveřejněno 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;

Vyhledávání webových crawlerů
public class SearchCrawler implements Runnable {

/*
  * disallowListCache cache robot neumožňuje vyhledávání v URL. Protokol Robot umístí robots.txt soubor do kořenového adresáře webu,
  * Specifikuje, které stránky na webu jsou vyhledávatelné pro omezené vyhledávání.
  * Vyhledávací program by měl tyto oblasti během vyhledávání přeskočit, zde je příklad robots.txt:
  * # robots.txt pro http://somehost.com/ User-agent:
  * Nedovolit: /cgi-bin/
  * Zakazovat: /registrace # Zakazovat roboty na registrační stránce
  * Zakazovat: /přihlášení
  */

soukromý HashMap<String, ArrayList<String>> disallowListCache = nový HashMap<String, ArrayList<String>>();
ArrayList<String> errorList = nový ArrayList<String>(); Chybová zpráva
Výsledek ArrayList<String> = nový ArrayList<String>(); Výsledky vyhledávání
String startUrl; Výchozí bod, jak začít hledat
int maxUrl; Maximální počet zpracovaných URL
Vyhledávání řetězcůString; Řetězce k vyhledávání
booleovský caseSensitive = nepravdivý; Zda být citlivý na velikost písmen a písmena
booleovský limitHost = nepravdivý; Zda hledat v omezeném hostiteli

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

public ArrayList<String> getResult() {
  Výsledek vrátit;
}

public void run() { // Spusťte vyhledávací vlákno
  crawl(startUrl, maxUrl, searchString, limitHost, caseSensitive);
}

Detekce formátování URL
private URL verifyUrl(String url) {
  Zpracovávají se pouze HTTP URL.
  if (!url.toLowerCase().startsWith("http://"))
   return null;
  URL verifiedUrl = null;
  try {
   verifiedUrl = nová URL(url);
  } catch (Exception e) {
   return null;
  }
  return verified URL;
}

Detekuje, zda robot umožňuje přístup k dané URL.
private boolean isRobotAllowed(URL urlToCheck) {
  Host řetězce = urlToCheck.getHost().toLowerCase(); Získejte hostitele, který dává RUL
  System.out.println("host="+host);

  Získejte cache URL, které váš hostitel neumožňuje vyhledávat
  ArrayList<String> disallowList = disallowListCache.get(host);

  Pokud ještě nemáte cache, stáhněte si ji a uložte do mezipaměti.
  if (disallowList == null) {
   disallowList = nový ArrayList<String>();
   try {
    URL robotsFileUrl = nová URL ("http://" + host + "/robots.txt");
    BufferedReader reader = nový BufferedReader(
      nový InputStreamReader(robotsFileUrl.openStream()));

    Přečtěte si robotický soubor a vytvořte si seznam cest, ke kterým není přístup.
    Strunová linka;
    while ((line = reader.readLine()) != null) {
     pokud (line.indexOf("Disallow:") == 0) {// Obsahuje "Disallow:"
      String disallowPath = line.substring("Disallow:"
        .length()); Získejte cestu k zakázanému přístupu

      Zkontrolujte poznámky.
      int commentIndex = disallowPath.indexOf("#");
      if (commentIndex != -1) {
       disallowPath = disallowPath.substring(0,
         commentIndex); Odstraňte komentář
      }

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

    Cache cesty, ke kterým tento hostitel nemá přístup.
    disallowListCache.put(host, disallowList);
   } catch (Exception e) {
    return true; V kořenovém adresáři webu nejsou žádné robots.txt soubory a vrací true
   }
  }

  String file = urlToCheck.getFile();
  System.out.println("File getFile()="+file);
  pro (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 {
   Otevřete připojení k URL pro čtení.
   BufferedReader reader = nový BufferedReader(nový InputStreamReader(
     pageUrl.openStream()));

   Přečti stránku do bufferu.
   Strunová linka;
   StringBuffer pageBuffer = nový StringBuffer();
   while ((line = reader.readLine()) != null) {
    pageBuffer.append(line);
   }

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

  return null;
}

Odstraňte "www" z URL
private String removeWwwFromUrl(String url) {
  int index = url.indexOf("://www.");
  pokud (index != -1) {
   return url.substring(0, index + 3) + url.substring(index + 7);
  }

  return (url);
}

Rozpracuj stránku a najdi odkaz
private ArrayList<String> retrieveLinks(URL pageUrl, String pageContents,
   HashSet crawledList, boolean limitHost) {
  Zkompilujte vzor spojení s regulárními výrazy.
  Pattern p = Pattern.compile("<a\\s+href\\s*=\\s*"?(. *?) [\"|>]",
    Pattern.CASE_INSENSITIVE);
  Matcher m = p.matcher(pageContents);

  ArrayList<String> linkList = nový ArrayList<String>();
  zatímco (m.find()) {
   String link = m.group(1).trim();

   if (link.length() < 1) {
    pokračujte;
   }

   Přeskočte odkaz na tuto stránku.
   if (link.charAt(0) == '#') {
    pokračujte;
   }

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

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

   if (link.indexOf("://") == -1) {
    pokud (link.charAt(0) == '/') {// je absolutně
     link = "http://" + pageUrl.getHost() + ":"
       + pageUrl.getPort() + odkaz;
    } jinak {
     String file = pageUrl.getFile();
     pokud (file.indexOf('/') == -1) {// zpracovává relativní adresy
      link = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + "/" + odkaz;
     } jinak {
      String path = file.substring(0,
        file.lastIndexOf('/') + 1);
      link = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + path + link;
     }
    }
   }

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

   link = odstranitWwwFromUrl(link);

   URL verifiedLink = verifyUrl(link);
   if (verifiedLink == null) {
    pokračujte;
   }

   /* Pokud omezujete hostitele, vylučujte ty URL, které nesplňují kritéria */
   if (limitHost
     && !pageUrl.getHost().toLowerCase().equals(
       verifiedLink.getHost().toLowerCase())) {
    pokračujte;
   }

   Přeskočte odkazy, které už byly zpracovány.
   if (crawledList.contains(link)) {
    pokračujte;
   }

   linkList.add(link);
  }

  return (linkList);
}

Prohledejte obsah stažené webové stránky, abyste zjistili, zda se na stránce nachází specifikovaný vyhledávací řetězec

soukromé boolean vyhledáváníStringMatches(String pageContents,
   String searchString, boolean caseSensitive) {
  VyhledáváníObsah řetězce = stránkaObsah;
  pokud (!caseSensitive) {// pokud je necitlivé na velká písmena
   searchContents = pageContents.toSmallCase();
  }

  Vzor p = Pattern.compile("[\\s]+");
  String[] terms = p.split(searchString);
  pro (int i = 0; I < terms.length; i++) {
   pokud (caseSensitive) {
    if (searchContents.indexOf(terms)) == -1) {
     return false;
    }
   } jinak {
    if (searchContents.indexOf(terms).toLowerCase()) == -1) {
     return false;
    }
   }
  }

  return true;
}

Proveďte skutečnou vyhledávací operaci
public<String> ArrayList crawl(String startUrl, int maxUrls,
   String searchString, boolean limithost, boolean caseSensitive) {

  HashSet<String> crawledList = nový HashSet<String>();
  LinkedHashSet<String> toCrawlList = nový LinkedHashSet<String>();

  if (maxUrls < 1) {
   errorList.add("Hodnota neplatných Maxů URL.");
   System.out.println("Hodnota neplatných Maxů URL.");
  }

  if (searchString.length() < 1) {
   errorList.add("Chybějící vyhledávací řetězec.");
   System.out.println("Chybějící vyhledávací řetězec");
  }

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

  Přesunte www mimo startovací URL
  startUrl = odstranitWwwFromUrl(startUrl);

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

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

   Získejte URL na konci seznamu.
   String url = toCrawlList.iterator().next();

   Odstraňte URL ze seznamu pro procházení.
   toCrawlList.remove(url);

   Převést URL řetězce na URL objekt.
   URL verifiedUrl = verifyUrl(url);

   Přeskočte URL, pokud k ní roboti nemají přístup.
   if (!isRobotAllowed(verifiedUrl)) {
    pokračujte;
   }

   Přidejte zpracované URL do crawledList
   crawledList.add(url);
   String pageContents = downloadPage(verifiedUrl);

   if (pageContents != null & pageContents.length() > 0) {
    Získejte platný odkaz ze stránky
    <String> ArrayList links = retrieveLinks(verifiedUrl,
      pageContents, crawledList, limitHost);

    toCrawlList.addAll(odkazy);

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

  }
  Výsledek vrátit;
}

Hlavní funkce
public static void main(String[] args) {
  SearchCrawler crawler = nový SearchCrawler ("http://www.itsvse.com/", 100,"Delver_Si");
  Vyhledávání v vláknech = nové vlákno (crawler);
  System.out.println("Začni hledat...");
  System.out.println("result:");
  search.start();
  try {
   search.join();
  } catch (InterruptedException e) {
   TODO Automaticky generovaný blok zachycení
   e.printStackTrace();
  }
}
}
[/mw_shl_code]

1.png (100.02 KB, Počet stažení: 591)

2.png (72.18 KB, Počet stažení: 596)

3.png (188.46 KB, Počet stažení: 606)





Předchozí:PHP tvoří 82,2 % z 100 největších webů
Další:Java Edition Web Source Code Viewer
Zveřejněno 30.11.2014 18:07:24 |
Když jsem viděl zprávu, že Jack Ma je stále 300 milionů od toho, aby dohnal Li Ka-shinga a stal se nejbohatším mužem v Asii, zasmál jsem se v srdci a rychle zkontroloval své hodnocení na internetu, které nebylo v podstatě ovlivněno, a zůstalo asi na 1,4 miliardy, teď jsem ulevilo! Ve skutečnosti jsem také člověk se sny, už od dětství jsem snil, že jednoho dne pojedu Lamborghini zpátky do našeho rodného města se slunečními brýlemi, po téměř 20 letech tvrdé práce je teď sen napůl splněný, už mám vlastní sluneční brýle, jen sportovní auto, sen se chystá stát skutečností a jsem trochu nadšený, když na to myslím!
 Pronajímatel| Zveřejněno 30.11.2014 18:28:24 |

Webový crawler (také známý jako web spider, webbot, v komunitě FOAF častěji označovaný jako web chaser) je program nebo skript, který automaticky stahuje informace o World Wide Web podle určitých pravidel. Mezi méně často používané názvy patří mravenci, auto-indexy, emulátory nebo červi.
Zveřejněno 30.11.2014 17:40:16 |
Delver_Si Zveřejněno 30. 11. 2014 v 17:22
Chci napsat nástroj, který by rozšířil mssql ftp a další nástroje, ale online to není snadné používat

Napiš to, kryju ti záda!  Demoliční nástroje jsou většinou psány v .net, a v Javě jich moc není, takže jeden můžete napsat i v Javě!
Zveřejněno 30.11.2014 17:19:07 |
Utírám, tohle je dobrá loutka na výrobu hackovacího nástroje!
Zveřejněno 30.11.2014 17:22:22 |
Nejprve jsem ho sbíral, i když je teď k ničemu, věřím, že se mi bude hodit i v budoucnu!
 Pronajímatel| Zveřejněno 30.11.2014 17:22:42 |
Chci napsat nástroj, který by rozšířil mssql ftp a další nástroje, ale online to není snadné používat
Zveřejněno 30.11.2014 18:08:16 |
Jak to myslíš, nerozumím
 Pronajímatel| Zveřejněno 30.11.2014 18:32:40 |
admin zveřejněno 30. 11. 2014 17:40
Napiš to, kryju ti záda!  Demoliční nástroje jsou většinou psány v .net, a v Javě jich moc není, takže jeden můžete napsat i v Javě!

MSSQL blaster v sadě ani nedokáže vystřelit ten můj,
 Pronajímatel| Zveřejněno 30.11.2014 18:33:09 |
Test zveřejněn 30. 11. 2014 18:07
Když se dozvěděl, že Jack Ma stále chybí o 300 milionů na to, aby dohnal Li Ka-shinga a stal se nejbohatším mužem v Asii, srdce mu cvaklo, rychle zkontroloval své hodnocení na internetu a v podstatě ho to nijak neovlivňovalo...

Jsi vesta webmastera, že?"
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com