Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 29455|Atbildi: 11

[Java avota kods] Tīmekļa rāpuļprogrammas Java versija

[Kopēt saiti]
Publicēts 30.11.2014 16:56:56 | | | |
[mw_shl_code=java,true]/**
* @author Jack.Wang
*
*/
importēt java.io.BufferedReader;
importēt java.io.InputStreamReader;
importēt java.net.URL;
importēt java.util.ArrayList;
importēt java.util.HashMap;
importēt java.util.HashSet;
importēt java.util.LinkedHashSet;
importēt java.util.regex.Matcher;
importēt java.util.regex.Pattern;

Tīmekļa rāpuļprogrammu meklēšana
publiskā klase SearchCrawler implements Runnable {

/*
  * disallowListCache kešatmiņas robots neļauj meklētos URL. Robota protokols vietnes saknes direktorijā iestata robots.txt failu,
  * Norāda, kuras vietnes lapas ir meklējamas ierobežotai meklēšanai.
  * Meklēšanas programmai meklēšanas laikā vajadzētu izlaist šīs jomas, šeit ir robots.txt piemērs:
  * # robots.txt http://somehost.com/ lietotāja aģentam:
  * Aizliegt: /cgi-bin/
  * Neatļaut: /registration # Neatļaut robotus reģistrācijas lapā
  * Neatļaut: /login
  */

private HashMap<String, ArrayList<String>> disallowListCache = new HashMap<String, ArrayList<String>>();
ArrayList<String> errorList = jauns ArrayList<String>(); Kļūdas ziņojums
ArrayList<String> rezultāts = jauns ArrayList<String>(); Meklētie rezultāti
Virknes startUrl; Sākumpunkts, lai sāktu meklēšanu
int maxUrl; Maksimālais apstrādāto URL skaits
Virkne searchString; Meklējamās virknes
būla caseSensitive = false; Vai reģistrjutīgums
Būla limitsHost = false; Vai meklēt ierobežotā resursdatorā

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

public ArrayList<String> getResult() {
  atgriezt rezultātu;
}

public void run() { // Sāciet meklēšanas pavedienu
  crawl(startUrl, maxUrl, searchString, limitHost, caseSensitive);
}

URL formatējuma noteikšana
private URL verifyUrl(String url) {
  Tiek apstrādāti tikai HTTP URL.
  if (!url.toLowerCase().startsWith("http://"))
   atgriezt null;
  URL verifiedUrl = null;
  izmēģināt {
   verifiedUrl = jauns URL(url);
  } nozveja (e izņēmums) {
   atgriezt null;
  }
  atgriezt verifiedUrl;
}

Nosaka, vai robots ļauj piekļūt norādītajam URL.
private boolean isRobotAllowed(URL urlToCheck) {
  Virknes resursdators = urlToCheck.getHost().toLowerCase(); Iegūstiet saimnieku, kas dod RUL
  System.out.println("host="+host);

  Iegūstiet kešatmiņu ar URL, kurus jūsu resursdators neļauj meklēt
  ArrayList<String> disallowList = disallowListCache.get(host);

  Ja jums vēl nav kešatmiņas, lejupielādējiet un saglabājiet to kešatmiņā.
  if (disallowList == null) {
   disallowList = jauns ArrayList<String>();
   izmēģināt {
    URL robotsFileUrl = jauns URL("http://" + resursdators + "/robots.txt");
    BufferedReader lasītājs = jauns BufferedReader(
      jauns InputStreamReader(robotsFileUrl.openStream()));

    Izlasiet robota failu, lai izveidotu sarakstu ar ceļiem, kuriem nav atļauts piekļūt.
    Stīgu līnija;
    kamēr ((line = reader.readLine()) != null) {
     if (line.indexOf("Neatļaut:") == 0) {// Vai tas satur "Neatļaut:"
      Virkne disallowPath = line.substring("Neatļaut:"
        .garums()); Ceļš uz neatļautu piekļuvi

      Pārbaudiet anotācijas.
      int commentIndex = disallowPath.indexOf("#");
      if (commentIndex != -1) {
       disallowPath = disallowPath.substring(0,
         komentāru indekss); Noņemt komentāru
      }

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

    Kešatmiņas ceļi, kuriem šim resursdatoram nav atļauts piekļūt.
    disallowListCache.put(resursdators, disallowList);
   } nozveja (e izņēmums) {
    atgriešanās true; Vietnes saknes direktorijā nav robots.txt failu, un tas atgriež true
   }
  }

  Virknes fails = urlToCheck.getFile();
  System.out.println("Fails getFile()="+fails);
  for (int i = 0; i < disallowList.size(); i++) {
   Virkne neatļaut = disallowList.get(i);
   if (fails.startsWith(neatļaut)) {
    atgriešanās nepatiesa;
   }
  }

  atgriešanās true;
}

private String downloadPage(URL pageUrl) {
  izmēģināt {
   Atveriet savienojumu ar URL lasīšanai.
   BufferedReader reader = jauns BufferedReader(jauns InputStreamReader(
     pageUrl.openStream()));

   Lasīt lapu buferī.
   Stīgu līnija;
   StringBuffer pageBuffer = jauns StringBuffer();
   kamēr ((line = reader.readLine()) != null) {
    pageBuffer.append(rinda);
   }

   atgriezties pageBuffer.toString();
  } nozveja (e izņēmums) {
  }

  atgriezt null;
}

"www" noņemšana no URL
private String removeWwwFromUrl(String url) {
  int indekss = url.indexOf("://www.");
  if (indekss != -1) {
   atgriezt url.substring(0, indekss + 3) + url.substring(indekss + 7);
  }

  atgriešanās (URL);
}

Analizējiet lapu un atrodiet saiti
private ArrayList<String> retrieveLinks(URL pageUrl, String pageContents,
   HashSet crawledList, boolean limitHost) {
  Sastādiet saites atbilstības modeli ar regulārajām izteiksmēm.
  Pattern p = Pattern.compile("<a\\s+href\\s*=\\s*\"?(. *?) [\"|>]",
    Pattern.CASE_INSENSITIVE);
  Matcher m = p.matcher(pageContents);

  ArrayList<String> linkList = jauns ArrayList<String>();
  kamēr (m.find()) {
   Virknes saite = m.group(1).trim();

   if (link.length() < 1) {
    turpināt;
   }

   Izlaidiet saiti uz šo lapu.
   if (link.charAt(0) == '#') {
    turpināt;
   }

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

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

   if (link.indexOf("://") == -1) {
    if (link.charAt(0) == '/') {// rīkojas absolūti
     link = "http://" + pageUrl.getHost() + ":"
       + pageUrl.getPort() + saite;
    } citādi {
     Virknes fails = pageUrl.getFile();
     if (file.indexOf('/') == -1) {// apstrādā relatīvās adreses
      link = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + "/" + saite;
     } citādi {
      Virknes ceļš = file.substring(0,
        file.lastIndexOf('/') + 1);
      link = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + ceļš + saite;
     }
    }
   }

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

   link = removeWwwFromUrl(saite);

   URL verifiedLink = verifyUrl(saite);
   if (verifiedLink == null) {
    turpināt;
   }

   /* Ja ierobežojat resursdatorus, izslēdziet tos URL, kas neatbilst kritērijiem */
   if (limitHost
     && !pageUrl.getHost().toLowerCase().equals(
       verifiedLink.getHost().toLowerCase())) {
    turpināt;
   }

   Izlaidiet tās saites, kas jau ir apstrādātas.
   if (crawledList.contains(link)) {
    turpināt;
   }

   linkList.add(saite);
  }

  atgriešanās (linkList);
}

Meklējiet lejupielādētās tīmekļa lapas saturu, lai noteiktu, vai lapā ir norādīta meklēšanas virkne

private Boolean searchStringMatches(String pageContents,
   String searchString, boolean caseSensitive) {
  String searchContents = pageContents;
  if (!caseSensitive) {// ja reģistrjutīgs
   searchContents = pageContents.toLowerCase();
  }

  Modelis p = Pattern.compile("[\\s]+");
  String[] terms = p.split(searchString);
  for (int i = 0; i < terminus.garums; i++) {
   if (reģistrjutīgs) {
    if (searchContents.indexOf(terms) == -1) {
     atgriešanās nepatiesa;
    }
   } citādi {
    if (searchContents.indexOf(terms.toLowerCase()) == -1) {
     atgriešanās nepatiesa;
    }
   }
  }

  atgriešanās true;
}

Veiciet faktisko meklēšanas darbību
public ArrayList<String> crawl(String startUrl, int maxUrls,
   String searchString, boolean limithost, boolean caseSensitive) {

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

  if (maxUrls < 1) {
   errorList.add("Nederīga maksimālā URL vērtība.");
   System.out.println("Nederīga maksimālā URL vērtība.");
  }

  if (searchString.length() < 1) {
   errorList.add("Trūkst meklēšanas virknes.");
   System.out.println("Trūkst meklēšanas virknes");
  }

  if (errorList.size() > 0) {
   System.out.println("kļūda!!");
   atgriezties errorList;
  }

  Pārvietot www no sākuma URL
  startUrl = removeWwwFromUrl(startUrl);

  toCrawlList.add(startUrl);
  kamēr (toCrawlList.size() > 0) {

   if (maxUrls != -1) {
    if (crawledList.size() == maxUrls) {
     pārtraukums;
    }
   }

   Iegūstiet URL saraksta apakšā.
   Virknes url = toCrawlList.iterator().next();

   Noņemiet URL no pārmeklēšanas saraksta.
   toCrawlList.remove(url);

   Konvertējiet virknes URL uz URL objektu.
   URL verifiedUrl = verifyUrl(url);

   Izlaist URL, ja robotiem nav atļauts tam piekļūt.
   if (!isRobotAllowed(verifiedUrl)) {
    turpināt;
   }

   Apstrādāto URL pievienošana pārmeklētajam sarakstam
   crawledList.add(url);
   String pageContents = downloadPage(verifiedUrl);

   if (pageContents != null && pageContents.length() > 0) {
    Derīgas saites iegūšana no lapas
    ArrayList<String> saites = retrieveLinks(verifiedUrl,
      pageContents, crawledList, limitHost);

    uzCrawlList.addAll(saites);

    if (searchStringMatches(pageContents, searchString,
      reģistrjutīgs)) {
     result.add(URL);
     System.out.println(url);
    }
   }

  }
  atgriezt rezultātu;
}

Galvenā funkcija
public static void main(String[] args) {
  SearchCrawler rāpuļprogramma = jauns SearchCrawler("http://www.itsvse.com/", 100,"Delver_Si");
  Thread search = new Thread(crawler);
  System.out.println("Sākt meklēt...");
  System.out.println("rezultāts:");
  meklēt.sākt();
  izmēģināt {
   search.join();
  } nozveja (InterruptedException e) {
   TODO Automātiski ģenerēts nozvejas bloks
   e.printStackTrace();
  }
}
}
[/mw_shl_code]

1.png (100.02 KB, Lejupielādes skaits: 591)

2.png (72.18 KB, Lejupielādes skaits: 596)

3.png (188.46 KB, Lejupielādes skaits: 606)





Iepriekšējo:PHP veido 82.2% no populārākajām 100 W vietnēm
Nākamo:Java Edition tīmekļa avota koda skatītājs
Publicēts 30.11.2014 18:07:24 |
Redzot ziņas, ka Džeks Ma joprojām bija 300 miljonu attālumā no Li Ka-shing, lai kļūtu par bagātāko cilvēku Āzijā, es sirdī smējās un ātri pārbaudīju savu rangu internetā, kas būtībā netika ietekmēts, un rangs palika aptuveni 1,4 miljardi, tagad es esmu atvieglots! Patiesībā es esmu arī cilvēks ar sapņiem, kopš bērnības es sapņoju, ka kādu dienu es braukšu ar Lamborghini sporta auto atpakaļ uz mūsu dzimto pilsētu ar saulesbrillēm, pēc gandrīz 20 gadu smaga darba, tagad sapnis ir pusrealizēts, man jau ir savas saulesbrilles, tikai sporta automašīna, sapnis drīz kļūs par realitāti, un es esmu mazliet satraukts, kad par to domāju!
 Saimnieks| Publicēts 30.11.2014 18:28:24 |

Tīmekļa rāpuļprogramma (pazīstama arī kā tīmekļa zirneklis, tīmekļa robots, FOAF kopienā biežāk saukts par tīmekļa pakaļdzītāju) ir programma vai skripts, kas automātiski nokasa informāciju par globālo tīmekli saskaņā ar noteiktiem noteikumiem. Citi retāk lietoti nosaukumi ir skudras, automātiskie indeksi, emulatori vai tārpi.
Publicēts 30.11.2014 17:40:16 |
Delver_Si Publicēts 2014-11-30 17:22
Es vēlos uzrakstīt rīku, lai eksplodētu mssql ftp un citus rīkus, bet to nav viegli izmantot tiešsaistē

Uzrakstiet to, es jums palīdzu!  Nojaukšanas rīki parasti ir rakstīti .net, un nav daudz rakstīts Java, tāpēc jūs varat rakstīt vienu Java!
Publicēts 30.11.2014 17:19:07 |
Es noslaucīju, šī ir laba marionete, lai izveidotu hakeru rīku!
Publicēts 30.11.2014 17:22:22 |
Es to savācu vispirms, lai gan tagad tas ir bezjēdzīgi, es uzskatu, ka tas būs noderīgs nākotnē!
 Saimnieks| Publicēts 30.11.2014 17:22:42 |
Es vēlos uzrakstīt rīku, lai eksplodētu mssql ftp un citus rīkus, bet to nav viegli izmantot tiešsaistē
Publicēts 30.11.2014 18:08:16 |
Ko jūs domājat, es nesaprotu
 Saimnieks| Publicēts 30.11.2014 18:32:40 |
admin Publicēts 2014-11-30 17:40
Uzrakstiet to, es jums palīdzu!  Nojaukšanas rīki parasti ir rakstīti .net, un nav daudz rakstīts Java, tāpēc jūs varat rakstīt vienu Java!

Komplektā esošais mssql blaster pat nevar spridzināt manu,
 Saimnieks| Publicēts 30.11.2014 18:33:09 |
Tests Publicēts 2014-11-30 18:07
Redzot ziņas, ka Džeks Ma joprojām bija par 300 miljoniem, lai panāktu Li Ka-shing, lai kļūtu par bagātāko cilvēku Āzijā, viņa sirds noklikšķināja, un viņš ātri pārbaudīja savu rangu internetā, un viņš būtībā netika ietekmēts...

Tu esi tīmekļa pārziņa veste, vai ne?"
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com