Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 29455|Válasz: 11

[Java forráskód] Java verziós webcrawler

[Linket másol]
Közzétéve 2014. 11. 30. 16:56:56 | | | |
[mw_shl_code=java,true]/**
* @author Jack.Wang
*
*/
importál java.io.BufferedReader;
importál java.io.InputStreamReader;
importál java.net.URL;
importál java.util.ArrayList;
importál java.util.HashMap;
importál java.util.HashSet;
importál java.util.LinkedHashSet;
importál java.util.regex.Matcher;
importál java.util.regex.Pattern;

Webes crawlerek keresése
public class SearchCrawler implements Runnable {

/*
  * disallowListCache gyorsítótár robot nem engedélyezi a keresési URL-eket. A Robot protokoll egy robots.txt fájlt állít be a weboldal gyökérkönyvtárában,
  * Megadja, hogy az oldalon mely oldalak kereshetők korlátozott kereséshez.
  * A keresőprogramnak ki kell hagynia ezeket a területeket a keresés során, íme egy példa robots.txt:
  * # robots.txt http://somehost.com/ User-agent:
  * Tilts: /cgi-bin/
  * Tiltsd meg: /regisztráció # Tiltsd meg robotokat a regisztrációs oldalon
  * Tilts: /bejelentkezés
  */

private HashMap<String, ArrayList<String>> disallowListCache = új HashMap<String, ArrayList<String>>();
ArrayList<String> errorList = new ArrayList<String>(); Hibaüzenet
ArrayList<String> result = új ArrayList<String>(); Keresési eredmények
String startUrl; Egy kiindulópont a keresés elindításához
int maxUrl; A feldolgozott URL-ek maximális száma
String searchString; Keresésre szánt stringek
boolean haszus Sensitive = hamis; Hogy legyen esetérzékeny vagy sem
boolean limitHost = hamis; Hogy keressünk-e korlátozott gazdagépen belül

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

public ArrayList<String> getResult() {
  visszaadási eredmény;
}

public void run() { // Indítsa el a keresési szálat
  crawl(startUrl, maxUrl, searchString, limitHost, caseSensitive);
}

URL formázás észlelése
private URL verifyUrl(String url) {
  Csak HTTP URL-eket dolgoznak fel.
  if (!url.toLowerCase().startsWith("http://"))
   return null;
  URL verifiedUrl = null;
  try {
   verifiedUrl = új URL(url);
  } fogás (Kivétel e) {
   return null;
  }
  return verifiedUrl;
}

Megállapítja, hogy a robot engedélyezi-e a megadott URL-hez való hozzáférést.
private boolean isRobotAllowed(URL urlToCheck) {
  String host = urlToCheck.getHost().toLowerCase(); Szerezd meg azt a gazdagépet, aki megadja a RUL-t
  System.out.println("host="+host);

  Szerezz egy olyan URL-gyorsítótárt, amit a hostod nem enged keresni
  ArrayList<String> disallowList = disallowListCache.get(host);

  Ha még nincs gyorsítótárod, töltsd le és gyorsítsd el.
  if (disallowList == null) {
   disallowList = új ArrayList<String>();
   try {
    URL robotsFileUrl = new URL("http://" + host + "/robots.txt");
    BufferedReader olvasó = új BufferedReader(
      new InputStreamReader(robotsFileUrl.openStream()));

    Olvasd el a robot fájlt, hogy létrehozz egy listát azokról az utakról, amelyekhez nem lehet hozzáférni.
    Húrvonal;
    míg ((line = reader.readLine()) != null) {
     if (line.indexOf("Disallow:") == 0) {// Tartalmazza-e a "Disallow:"
      String disallowPath = line.substring("Disallow:"
        .length()); Szerezd meg az útvonalat a tiltott hozzáféréshez

      Ellenőrizd az annotációkat.
      int commentIndex = disallowPath.indexOf("#");
      if (commentIndex != -1) {
       disallowPath = disallowPath.substring(0,
         commentIndex); Töröld a hozzászólást
      }

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

    Gyorsítótár útvonalak, amelyekhez ez a hoszt nem férhet hozzá.
    disallowListCache.put(host, disallowList);
   } fogás (Kivétel e) {
    return true; A weboldal gyökérkönyvtárában nincs robots.txt fájl, és az igaz értéket adja vissza
   }
  }

  String file = urlToCheck.getFile();
  System.out.println("Fájl getFile()="+file);
  for (int i = 0; i < disallowList.size(); i++) {
   String disallow = disallowList.get(i);
   if (file.startsWith(disallow)) {
    hamis;
   }
  }

  return true;
}

private String downloadPage(URL pageUrl) {
  try {
   Nyiss kapcsolatot az URL-re olvasáshoz.
   BufferedReader olvasó = új BufferedReader(új InputStreamReader(
     pageUrl.openStream()));

   Olvasd el az oldalt a bufferbe.
   Húrvonal;
   StringBuffer pageBuffer = új StringBuffer();
   míg ((line = reader.readLine()) != null) {
    pageBuffer.append(line);
   }

   return pageBuffer.toString();
  } fogás (Kivétel e) {
  }

  return null;
}

Távolítsa el az "www" kifejezést az URL-ről
private String removeWwwFromUrl(String url) {
  int index = url.indexOf("://www.");
  if (index != -1) {
   return url.substring(0, index + 3) + url.substring(index + 7);
  }

  return (URL);
}

Elemzd az oldalt, és keresd meg a linket
private ArrayList<String> retrieveLinks(URL pageUrl, String pageContents,
   HashSet crawledList, boolean limitHost) {
  Állítsd össze a link párosítási mintázatát rendszeres kifejezésekkel.
  Pattern p = Pattern.compile("<a\\s+href\\s*=\\s*\"?(. *?) [\"|>]",
    Pattern.CASE_INSENSITIVE);
  Matcher m = p.matcher(pageContents);

  ArrayList<String> linkList = új ArrayList<String>();
  míg (m.find()) {
   String link = m.group(1).trim();

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

   Ugrasd ki ennek az oldalnak a linkjét.
   if (link.charAt(0) == '#') {
    folytasd;
   }

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

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

   if (link.indexOf("://") == -1) {
    if (link.charAt(0) == '/') {// abszolút kezeli
     link = "http://" + pageUrl.getHost() + ":"
       + pageUrl.getPort() + link;
    } más {
     String file = pageUrl.getFile();
     if (file.indexOf('/') == -1) {// kezeli a relatív címeket
      link = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + "/" + link;
     } más {
      String path = file.substring(0,
        file.lastIndexOf('/') + 1);
      link = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + path + link;
     }
    }
   }

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

   link = eltávolít WwwFromUrl(link);

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

   /* Ha korlátozod a hósztehelyeket, kizárd azokat az URL-eket, amelyek nem felelnek meg a kritériumoknak */
   ha (limitHost
     && !pageUrl.getHost().toLowerCase().equals(
       verifiedLink.getHost().toLowerCase())) {
    folytasd;
   }

   Hagyd ki azokat a linkeket, amelyek már fel vannak dolgozva.
   if (crawledList.contains(link)) {
    folytasd;
   }

   linkList.add(link);
  }

  return (linkList);
}

Keresd meg a letöltött weboldal tartalmát, hogy megállapítsd, van-e meghatározott keresési láncszál az oldalon

private boolean searchStringMatches(String pageContents,
   String searchString, boolean caseSensitive) {
  String searchContents = pageContents;
  if (!caseSensitive) {// if kiskitűzésmentes
   searchContents = pageContents.toLowerCase();
  }

  Pattern p = Pattern.compile("[\\s]+");
  String[] termek = p.split(searchString);
  for (int i = 0; < a hossz; i++) {
   if (caseSensitive) {
    if (searchContents.indexOf(terms) == -1) {
     hamis;
    }
   } más {
    if (searchContents.indexOf(terms.toLowerCase()) == -1) {
     hamis;
    }
   }
  }

  return true;
}

Végezze el a tényleges keresési műveletet
public ArrayList<String> crawl(String startUrl, int maxUrls,
   String searchString, boolean limithost, boolean caseSensitive) {

  HashSet<String> crawledList = új HashSet<String>();
  LinkedHashSet<String> toCrawlList = új LinkedHashSet<String>();

  if (maxUrls < 1) {
   errorList.add("Invalid Max URLs érték.");
   System.out.println ("Érvénytelen maximális URL-érték.");
  }

  if (searchString.length() < 1) {
   errorList.add("Hiányzó keresési string.");
   System.out.println ("Hiányzó kereső lánc");
  }

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

  Mozgasd ki a www-t a kezdő URL-ből
  startUrl = removeWwwFromUrl(startUrl);

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

   if (maxUrls != -1) {
    if (crawledList.size() == maxUrls) {
     szünet;
    }
   }

   A lista alján találd az URL-t.
   String url = toCrawlList.iterator().next();

   Távolítsa el az URL-t a crawl listáról.
   toCrawlList.remove(url);

   Konvertáld a string URL-t URL objektummá.
   URL verifiedUrl = verifyUrl(url);

   Hagyd ki az URL-t, ha a robotok nem férhetnek hozzá.
   if (!isRobotAllowed(verifiedUrl)) {
    folytasd;
   }

   Feldolgozott URL-ek hozzáadása a crawledList-hez
   crawledList.add(url);
   String pageContents = downloadPage(verifiedUrl);

   if (pageContents != null && pageContents.length() > 0) {
    Szerezz érvényes linket az oldalról
    ArrayList<String> links = retrieveLinks(verifiedUrl,
      pageContents, crawledList, limitHost);

    toCrawlList.addAll(links);

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

  }
  visszaadási eredmény;
}

Fő funkció
public static void main(String[] args) {
  SearchCrawler crawler = új SearchCrawler("http://www.itsvse.com/", 100,"Delver_Si");
  Szálkeresés = új Thread (crawler);
  System.out.println ("Keresés indítása...");
  System.out.println("eredmény:");
  search.start();
  try {
   search.join();
  } catch (InterruptedException e) {
   TODO Automatikusan generált fogóblokk
   e.printStackTrace();
  }
}
}
[/mw_shl_code]

1.png (100.02 KB, Letöltések száma: 591)

2.png (72.18 KB, Letöltések száma: 596)

3.png (188.46 KB, Letöltések száma: 606)





Előző:A PHP a legjobb 100 wattos weboldalak 82,2%-át teszi ki
Következő:Java Edition Web Source Code Viewer
Közzétéve 2014. 11. 30. 18:07:24 |
Amikor láttam a hírt, hogy Jack Ma még 300 millióra van attól, hogy utolérje Li Ka-shinget, és Ázsia leggazdagabb embere legyen, nevetettem magamban, és gyorsan megnéztem az internetes rangsoromat, ami gyakorlatilag nem változott, és a rangsor körülbelül 1,4 milliárd maradt, most megkönnyebbültem! Valójában én is álmodozó vagyok, gyerekkorom óta arról álmodtam, hogy egyszer egy Lamborghini sportautóval vezek vissza a szülővárosunkba napszemüveggel, közel 20 év kemény munka után, most az álom félig valóra vált, már van saját napszemüvegem, csak egy sportautó, az álom valóra válik, és egy kicsit izgatott vagyok, amikor belegondolok!
 Háziúr| Közzétéve 2014. 11. 30. 18:28:24 |

A webcrawler (más néven web pók, webbot, a FOAF közösségben gyakrabban web chaser-nek nevezik) egy program vagy szkript, amely automatikusan kaparja az információkat a World Wide Webről bizonyos szabályok szerint. Más, kevésbé használt nevek a hangyák, autoindexek, emulátorok vagy férgek.
Közzétéve 2014. 11. 30. 17:40:16 |
Delver_Si Közzétéve: 2014-11-30 17:22
Szeretnék írni egy eszközt, ami felrobbantja az mssql ftp-t és más eszközöket, de online használata nem könnyű

Írd meg, én támogatlak!  A bontóeszközök általában .net-ben vannak írva, és kevés Java nyelvű eszköz, így egyet is írhatsz Java-ban!
Közzétéve 2014. 11. 30. 17:19:07 |
Én törölök, ez egy jó báb egy hackelő eszköz készítéséhez!
Közzétéve 2014. 11. 30. 17:22:22 |
Először én gyűjtöttem össze, bár most haszontalan, hiszem, hogy a jövőben hasznos lesz!
 Háziúr| Közzétéve 2014. 11. 30. 17:22:42 |
Szeretnék írni egy eszközt, ami felrobbantja az mssql ftp-t és más eszközöket, de online használata nem könnyű
Közzétéve 2014. 11. 30. 18:08:16 |
Mit értesz az alatt, hogy nem értem
 Háziúr| Közzétéve 2014. 11. 30. 18:32:40 |
Admin közzétéve: 2014-11-30 17:40
Írd meg, én támogatlak!  A bontóeszközök általában .net-ben vannak írva, és kevés Java nyelvű eszköz, így egyet is írhatsz Java-ban!

Az MSSQL blaster a készletben még az enyémet sem tudja kilőni,
 Háziúr| Közzétéve 2014. 11. 30. 18:33:09 |
teszt közzétéve: 2014-11-30 18:07
Amikor meglátta a hírt, hogy Jack Ma még mindig 300 millióval marad el attól, hogy utolérje Li Ka-shinget, és Ázsia leggazdagabb embere legyen, a szíve összeszorult, gyorsan megnézte az internetes rangsorát, és gyakorlatilag nem érintette...

Te vagy a webmester mellénye, ugye?"
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com