Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 29455|Odgovoriti: 11

[Java izvorna koda] Java različica spletnega pajka

[Kopiraj povezavo]
Objavljeno na 30. 11. 2014 16:56:56 | | | |
[mw_shl_code=java,true]/**
* @author Jack.Wang
*
*/
import java.io.BufferedReader;
uvoz java.io.InputStreamReader;
uvoz 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;

Iskanje spletnih pajkov
public class SearchCrawler implements Runnable {

/*
  * disallowListCache predpomnilniški robot ne dovoljuje iskanja URL-jev. Protokol Robot postavi robots.txt datoteko v korenski mapi spletne strani,
  * Določa, katere strani na strani so iskalne za omejeno iskanje.
  * Iskalni program naj ta območja med iskanjem preskoči, tukaj je primer robots.txt:
  * # robots.txt za http://somehost.com/ Uporabniški agent:
  * Disallow: /cgi-bin/
  * Nedovoli: /registracija # Prepoved robotov na registracijski strani
  * Izklopi: /prijava
  */

private HashMap<String, ArrayList<String>> disallowListCache = novi HashMap<String, ArrayList<String>>();
ArrayList<String> errorList = nov ArrayList<String>(); Sporočilo o napaki
Rezultat ArrayList<String> = nov ArrayList<String>(); Iskani rezultati
String startUrl; Izhodišče za začetek iskanja
int maxUrl; Največje število obdelanih URL-jev
String searchString; Nizi, ki jih je treba iskati
boolean caseSensitive = false; Ali je treba biti občutljiv na velike in velike črke
boolean limitHost = false; Ali iskati znotraj omejenega gostitelja

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

public ArrayList<String> getResult() {
  vrni rezultat;
}

public void run() { // Začni iskalno nit
  crawl(startUrl, maxUrl, searchString, limitHost, caseSensitive);
}

Zaznaj oblikovanje URL-jev
private URL verifyUrl(String url) {
  Obdelujejo se samo HTTP URL-ji.
  if (!url.toLowerCase().začne z("http://"))
   return null;
  URL verifiedUrl = null;
  try {
   verifiedUrl = nov URL(url);
  } catch (Izjema e) {
   return null;
  }
  return verifiedUrl;
}

Zazna, ali robot omogoča dostop do danega URL-ja.
private boolean isRobotAllowed(URL urlToCheck) {
  String host = urlToCheck.getHost().toLowerCase(); Vzemi gostitelja, ki daje RUL
  System.out.println("host="+host);

  Pridobite predpomnilnik URL-jev, ki jih vaš gostitelj ne dovoljuje iskati
  ArrayList<String> disallowList = disallowListCache.get(host);

  Če še nimaš predpomnilnika, ga prenesi in shrani v predpomnilnik.
  if (disallowList == null) {
   disallowList = nov ArrayList<String>();
   try {
    URL robotsFileUrl = nov URL("http://" + host + "/robots.txt");
    BufferedReader reader = novi BufferedReader(
      novi InputStreamReader(robotsFileUrl.openStream()));

    Preberite robotsko datoteko, da ustvarite seznam poti, do katerih ni dovoljen dostop.
    Strunska linija;
    medtem ko ((vrstica = reader.readLine()) != null) {
     if (line.indexOf("Disallow:") == 0) {// Ali vsebuje "Disallow:"
      String disallowPath = line.substring("Disallow:"
        .length()); Pridobite pot do prepovedanega dostopa

      Preverite opombe.
      int commentIndex = disallowPath.indexOf("#");
      if (commentIndex != -1) {
       disallowPath = disallowPath.substring(0,
         commentIndex); Odstranite komentar
      }

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

    Predpomnilniško poti, do katerih ta gostitelj nima dostopa.
    disallowListCache.put(host, disallowList);
   } catch (Izjema e) {
    vrni true; V korenskem imeniku spletne strani ni robots.txt datotek in vrne resnico
   }
  }

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

  vrni true;
}

private String downloadPage(URL pageUrl) {
  try {
   Odpri povezavo z URL-jem za branje.
   BufferedReader reader = nov BufferedReader(novi InputStreamReader(
     pageUrl.openStream()));

   Preberi stran v medpomnilnik.
   Strunska linija;
   StringBuffer pageBuffer = nov StringBuffer();
   medtem ko ((vrstica = reader.readLine()) != null) {
    pageBuffer.append(line);
   }

   vrni pageBuffer.toString();
  } catch (Izjema e) {
  }

  return null;
}

Odstranite "www" iz URL-ja
private String removeWwwFromUrl(String url) {
  int index = url.indexOf("://www.");
  if (index != -1) {
   vrni url.substring(0, index + 3) + url.substring(index + 7);
  }

  return (url);
}

Razčlenite stran in poiščite povezavo
private ArrayList<String> retrieveLinks(URL pageUrl, String pageContents,
   HashSet crawledList, boolean limitHost) {
  Primerjajte vzorec povezave z regularnimi izrazi.
  Vzorec p = Pattern.compile("<a\\s+href\\s*=\\s*\"?(. *?) [\"|>]",
    Pattern.CASE_INSENSITIVE);
  Matcher m = p.matcher(vsebina strani);

  ArrayList<String> linkList = novi ArrayList<String>();
  medtem ko (m.find()) {
   String link = m.group(1).trim();

   if (link.length() < 1) {
    nadaljuj;
   }

   Preskočite povezavo do te strani.
   if (link.charAt(0) == '#') {
    nadaljuj;
   }

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

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

   if (link.indexOf("://") == -1) {
    if (link.charAt(0) == '/') {// obravnava absolutno
     link = "http://" + pageUrl.getHost() + ":"
       + pageUrl.getPort() + link;
    } else {
     String file = pageUrl.getFile();
     if (file.indexOf('/') == -1) {// obravnava relativne naslove
      link = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + "/" + link;
     } else {
      Pot niza = datoteka.podniz(0,
        file.lastIndexOf('/') + 1);
      link = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + path + link;
     }
    }
   }

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

   link = remakeWwwFromUrl(link);

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

   /* Če omejujete gostitelje, izključite tiste URL-je, ki ne izpolnjujejo kriterijev */
   if (limitHost
     && !pageUrl.getHost().toLowerSize().equals(
       verifiedLink.getHost().toLowerCase())) {
    nadaljuj;
   }

   Preskočite povezave, ki so že obdelane.
   if (crawledList.contains(link)) {
    nadaljuj;
   }

   linkList.add(link);
  }

  return (linkList);
}

Preiščite vsebino prenesene spletne strani, da ugotovite, ali je na strani določen iskalni niz

Zasebno boolean iskanjeStringMatches(String pageContents,
   String searchString, boolean caseSensitive) {
  String searchContents = pageContents;
  if (!caseSensitive) {// if je neobčutljiv na velike črke
   searchContents = pageContents.toLittleLetter();
  }

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

  vrni true;
}

Izvedite dejansko iskalno operacijo
public<String> ArrayList crawl(String startUrl, int maxUrls,
   String searchString, boolean limithost, boolean caseSensitive) {

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

  if (maxUrls < 1) {
   errorList.add("Neveljavna vrednost največ URL-jev.");
   System.out.println("Neveljavna vrednost največjih URL-jev.");
  }

  if (searchString.length() < 1) {
   errorList.add("Manjkajoči iskalni niz.");
   System.out.println("Manjkajoči iskalni niz");
  }

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

  Premakni www izven začetnega URL-ja
  startUrl = removeWwwFromUrl(startUrl);

  toCrawlList.add(startUrl);
  medtem ko (toCrawlList.size() > 0) {

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

   Pridobite URL na dnu seznama.
   String url = toCrawlList.iterator().next();

   Odstranite URL s seznama za pajkanje.
   toCrawlList.remove(url);

   Pretvorite URL niza v URL objekt.
   URL verifiedUrl = verifyUrl(url);

   Preskočite URL, če roboti nimajo dostopa do njega.
   if (!isRobotAllowed(verifiedUrl)) {
    nadaljuj;
   }

   Dodajte obdelane URL-je v crawledList
   crawledList.add(url);
   String pageContents = downloadPage(verifiedUrl);

   if (pageContents != null & pageContents.length() > 0) {
    Pridobite veljavno povezavo s strani
    <String> ArrayList links = retrieveLinks(verifiedUrl,
      pageContents, crawledList, limitHost);

    toCrawlList.addAll(links);

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

  }
  vrni rezultat;
}

Glavna funkcija
public static void main(String[] args) {
  SearchCrawler crawler = nov SearchCrawler ("http://www.itsvse.com/", 100,"Delver_Si");
  Iskanje po niti = nova nit(pajka);
  System.out.println("Začni iskati...");
  System.out.println("rezultat:");
  search.start();
  try {
   search.join();
  } catch (InterruptedException e) {
   TODO samodejno generiran blok ujetja
   e.printStackTrace();
  }
}
}
[/mw_shl_code]

1.png (100.02 KB, Število prenosov: 591)

2.png (72.18 KB, Število prenosov: 596)

3.png (188.46 KB, Število prenosov: 606)





Prejšnji:PHP predstavlja 82,2 % največjih 100W spletnih strani
Naslednji:Java Edition spletni pregledovalnik izvorne kode
Objavljeno na 30. 11. 2014 18:07:24 |
Ko sem videl novico, da je Jack Ma še vedno 300 milijonov oddaljen od tega, da ujame Li Ka-shinga in postane najbogatejši človek v Aziji, sem se v srcu zasmejal in hitro preveril svojo uvrstitev na internetu, ki je bila praktično nespremenjena, in ostala je pri približno 1,4 milijarde, zdaj sem olajšan! Pravzaprav sem tudi oseba s sanjami, že od otroštva sem sanjal, da bom nekega dne z Lamborghini športnim avtomobilom vozil nazaj v naš domači kraj s sončnimi očali, po skoraj 20 letih trdega dela je zdaj sanje pol uresničene, že imam svoja sončna očala, le športni avto, sanje se bodo kmalu uresničile in sem malo navdušen, ko pomislim nanjo!
 Najemodajalec| Objavljeno na 30. 11. 2014 18:28:24 |

Spletni pajek (znan tudi kot spletni pajek, spletni bot, v skupnosti FOAF pogosteje imenovan spletni lovec) je program ali skripta, ki samodejno pridobiva informacije o svetovnem spletu v skladu z določenimi pravili. Druga manj pogosto uporabljena imena so mravlje, samodejni indeksi, emulatorji ali črvi.
Objavljeno na 30. 11. 2014 17:40:16 |
Delver_Si Objavljeno 30. 11. 2014 ob 17:22
Želim napisati orodje, ki bi razširilo mssql ftp in druga orodja, vendar ni enostavno za uporabo na spletu

Napiši, jaz te podpiram!  Orodja za rušenje so običajno napisana v .net-u, v Javi pa jih ni veliko, zato lahko eno napišete tudi v Javi!
Objavljeno na 30. 11. 2014 17:19:07 |
Jaz brišem, to je dobra lutka za izdelavo hekerskega orodja!
Objavljeno na 30. 11. 2014 17:22:22 |
Najprej sem ga zbral, čeprav je zdaj neuporaben, verjamem, da bo v prihodnosti uporaben!
 Najemodajalec| Objavljeno na 30. 11. 2014 17:22:42 |
Želim napisati orodje, ki bi razširilo mssql ftp in druga orodja, vendar ni enostavno za uporabo na spletu
Objavljeno na 30. 11. 2014 18:08:16 |
Kaj misliš s tem, da ne razumem
 Najemodajalec| Objavljeno na 30. 11. 2014 18:32:40 |
admin objavljeno 30. 11. 2014 ob 17:40
Napiši, jaz te podpiram!  Orodja za rušenje so običajno napisana v .net-u, v Javi pa jih ni veliko, zato lahko eno napišete tudi v Javi!

MSSQL blaster v kompletu ne more niti ustreliti mojega,
 Najemodajalec| Objavljeno na 30. 11. 2014 18:33:09 |
Test objavljen 30. 11. 2014 ob 18:07
Ko je videl novico, da Jack Ma še vedno zaostaja za 300 milijoni, da bi dohitel Li Ka-shinga in postal najbogatejši človek v Aziji, mu je srce kliknilo, hitro je preveril svojo uvrstitev na internetu in ga to praktično ni prizadelo...

Ti si spletni majsterjev telovnik, kajne?"
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com