Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 29455|Antwort: 11

[Java-Quellcode] Java-Version des Webcrawlers

[Link kopieren]
Veröffentlicht am 30.11.2014 16:56:56 | | | |
[mw_shl_code=java, wahr]/**
* @author Jack.Wang
*
*/
import java.io.BufferedReader;
java.io.InputStreamReader importieren;
java.net.URL importieren;
import java.util.ArrayList;
java.util.HashMap importieren;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

Suche nach Webcrawlern
öffentliche Klasse SearchCrawler implementiert Runnable {

/*
  * disallowListCache-Cache-Roboter erlaubt keine gesuchten URLs. Das Robot-Protokoll legt eine robots.txt-Datei im Root-Verzeichnis der Website fest,
  * Gibt an, welche Seiten auf der Seite für eingeschränkte Suche durchsuchbar sind.
  * Das Suchprogramm sollte diese Bereiche während der Suche überspringen, hier ist ein Beispiel für robots.txt:
  * # robots.txt für http://somehost.com/ User-Agent:
  * Nicht erlauben: /cgi-bin/
  * Nicht erlauben: /Registrierung # Roboter auf der Registrierungsseite nicht erlauben
  * Nicht erlauben: /login
  */

private HashMap<String, ArrayList<String>> disallowListCache = neuer HashMap<String, ArrayList<String>>();
ArrayList<String> errorList = neue ArrayList<String>(); Fehlermeldung
ArrayList-Ergebnis<String> = neuer ArrayList<String>(); Durchsuchte Ergebnisse
String startUrl; Ein Ausgangspunkt, um Ihre Suche zu beginnen
int maxUrl; Die maximale Anzahl der verarbeiteten URLs
String searchString; Zeichenketten, nach denen man suchen sollte
boolesche FallSensitive = falsch; Ob man groß- und kleinschreibungssensitiv sein soll oder nicht
boolesche LimitHost = falsch; Ob man innerhalb eines eingeschränkten Hosts suchen sollte

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

public ArrayList<String> getResult() {
  Rückgabeergebnis;
}

public void run() { // Starte den Suchthread
  crawl(startUrl, maxUrl, searchString, limitHost, caseSensitive);
}

URL-Formatierung erkennen
private URL verifyUrl(String url) {
  Es werden nur HTTP-URLs verarbeitet.
  if (!url.toLowerCase().startsWith("http://"))
   Null zurück;
  URL verifiedUrl = null;
  versuchen {
   verifiedUrl = neue URL(URL);
  } catch (Ausnahme e) {
   Null zurück;
  }
  return verifiziertUrl;
}

Erkennt, ob der Roboter Zugriff auf die angegebene URL erlaubt.
private boolean isRobotAllowed(URL urlToCheck) {
  String host = urlToCheck.getHost().toLowerCase(); Hol dir den Host, der das RUL gibt
  System.out.println("host="+host);

  Hol dir einen Cache mit URLs, die dein Host nicht durchsuchen erlaubt
  ArrayList<String> disallowList = disallowListCache.get(host);

  Wenn du noch keinen Cache hast, lade ihn herunter und cache ihn.
  wenn (disallowList == null) {
   disallowList = neuer ArrayList<String>();
   versuchen {
    URL robotsFileUrl = neue URL ("http://" + Host + "/robots.txt");
    BufferedReader Reader = neuer BufferedReader(
      neuer InputStreamReader (robotsFileUrl.openStream()));

    Lesen Sie die Roboterdatei, um eine Liste von Pfaden zu erstellen, auf die nicht zugegriffen werden darf.
    Stringline;
    während ((Line = reader.readLine()) != null) {
     wenn (line.indexOf("Disallow:") == 0) {// Enthält es "Disallow:"
      String disallowPath = line.substring("Disallow:"
        .length()); Erhalte den Weg zum verbotenen Zugriff

      Prüfe auf Anmerkungen.
      int commentIndex = disallowPath.indexOf("#");
      if (commentIndex != -1) {
       disallowPath = disallowPath.substring(0,
         commentIndex); Entfernen Sie den Kommentar
      }

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

    Cache-Pfade, auf die dieser Host keinen Zugriff haben darf.
    disallowListCache.put(host, disallowList);
   } catch (Ausnahme e) {
    Return true; Im Root-Verzeichnis der Website gibt es keine robots.txt Dateien, und es gibt true zurück
   }
  }

  String-Datei = urlToCheck.getFile();
  System.out.println("Datei getFile()="+file);
  für (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) {
  versuchen {
   Öffnen Sie die Verbindung zur URL zum Lesen.
   BufferedReader Reader = neuer BufferedReader (neuer InputStreamReader(
     pageUrl.openStream()));

   Lese die Seite in den Puffer.
   Stringline;
   StringBuffer pageBuffer = neuer StringBuffer();
   während ((Line = reader.readLine()) != null) {
    pageBuffer.append(zeile);
   }

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

  Null zurück;
}

Entfernen Sie "www" aus der URL
private String removeWwwFromUrl(String url) {
  int index = url.indexOf("://www.");
  wenn (Index != -1) {
   return url.substring(0, index + 3) + url.substring(index + 7);
  }

  return (URL);
}

Analysieren Sie die Seite und finden Sie den Link
private ArrayList<String> retrieveLinks(URL pageUrl, String pageContents,
   HashSet crawledList, boolean limitHost) {
  Kompiliere das Matching-Muster des Links mit regulären Ausdrücken.
  Muster p = Pattern.compile("<a\\s+href\\s*=\\s*\"?(. *?) [\"|>]",
    Pattern.CASE_INSENSITIVE);
  Matcher m = p.matcher(seiteInhalt);

  ArrayList<String> linkList = neuer ArrayList<String>();
  während (m.find()) {
   Stringlink = m.group(1).trim();

   if (link.length() < 1) {
    Fahren Sie fort;
   }

   Überspringen Sie den Link zu dieser Seite.
   if (link.charAt(0) == '#') {
    Fahren Sie fort;
   }

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

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

   wenn (link.indexOf("://") == -1) {
    if (link.charAt(0) == '/') {// verarbeitet absolut
     Link = "http://" + pageUrl.getHost() + ":"
       + pageUrl.getPort() + Link;
    } sonst {
     String-Datei = pageUrl.getFile();
     wenn (file.indexOf('/') == -1) {// relative Adressen behandelt
      Link = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + "/" + Link;
     } sonst {
      Stringpath = file.substring(0,
        file.lastIndexOf('/') + 1);
      Link = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + Pfad + Link;
     }
    }
   }

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

   Link = entfernenWwwFromUrl(Link);

   URL verifiedLink = verifyUrl(Link);
   wenn (verififiedLink == null) {
    Fahren Sie fort;
   }

   /* Wenn du Hosts einschränkst, schließe die URLs aus, die die Kriterien nicht erfüllen */
   wenn (limitHost)
     && !pageUrl.getHost().toLowerCase().equals(
       verifiedLink.getHost().toLowerCase())) {
    Fahren Sie fort;
   }

   Überspringe die bereits bearbeiteten Links.
   if (crawledList.contains(link)) {
    Fahren Sie fort;
   }

   linkList.add (Link);
  }

  Rückkehr (linkList);
}

Durchsuchen Sie den Inhalt einer heruntergeladenen Webseite, um festzustellen, ob eine bestimmte Suchfolge auf der Seite vorhanden ist

private boolesche Suche StringMatches (String pageContents,
   String searchString, boolean caseSensitive) {
  String searchContents = pageContents;
  if (!caseSensitive) {// if case insensitive
   searchContents = pageContents.toLowerCase();
  }

  Muster p = Pattern.compile("[\\s]+");
  String[]-Begriffe = p.split(searchString);
  für (int i = 0; Ich < Begriffe. Länge; i++) {
   if (caseSensitive) {
    wenn (searchContents.indexOf(terms) == -1) {
     return false;
    }
   } sonst {
    wenn (searchContents.indexOf(terms.toLowerCase()) == -1) {
     return false;
    }
   }
  }

  Return true;
}

Führen Sie die eigentliche Suchoperation durch
public ArrayList<String> crawl(String startUrl, int maxUrls,
   String searchString, boolean limithost, boolean caseSensitive) {

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

  if (maxUrls < 1) {
   errorList.add ("Ungültige maximale URLs-Wert.");
   System.out.println("Ungültige maximale URLs-Wert.");
  }

  if (searchString.length() < 1) {
   errorList.add ("fehlende Suchzeichenfolge.");
   System.out.println ("Fehlender Suchstring");
  }

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

  Flytt www aus der Start-URL
  startUrl = entfernenWwwFromUrl(startUrl);

  toCrawlList.add (startUrl);
  während (toCrawlList.size() > 0) {

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

   Holen Sie sich die URL unten auf der Liste.
   String-URL = toCrawlList.iterator().next();

   Entfernen Sie die URL aus der Crawl-Liste.
   toCrawlList.remove(URL);

   Konvertiere die String-URL in ein URL-Objekt.
   URL verifiedUrl = verifyUrl(url);

   Überspringe die URL, wenn Roboter nicht darauf zugreifen dürfen.
   if (!isRobotAllowed(verifiedUrl)) {
    Fahren Sie fort;
   }

   Fügen Sie bearbeitete URLs zur gecrawlten Liste hinzu
   crawledList.add(URL);
   String pageContents = downloadPage(verifiedUrl);

   if (pageContents != null && pageContents.length() > 0) {
    Holen Sie sich einen gültigen Link von der Seite
    ArrayList-Links<String> = retrieveLinks(verifiedUrl,
      pageContents, crawledList, limitHost);

    toCrawlList.addAll(links);

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

  }
  Rückgabeergebnis;
}

Hauptfunktion
public static void main(String[] args) {
  SearchCrawler Crawler = neuer SearchCrawler ("http://www.itsvse.com/", 100,"Delver_Si");
  Thread-Suche = neuer Thread (Crawler);
  System.out.println ("Such starten...");
  System.out.println("result:");
  search.start();
  versuchen {
   search.join();
  } catch (InterruptedException e) {
   TODO Autogenerierter Fangblock
   e.printStackTrace();
  }
}
}
[/mw_shl_code]

1.png (100.02 KB, Anzahl der Downloads: 591)

2.png (72.18 KB, Anzahl der Downloads: 596)

3.png (188.46 KB, Anzahl der Downloads: 606)





Vorhergehend:PHP macht 82,2 % der größten 100W-Websites aus
Nächster:Java Edition Web-Quellcode-Viewer
Veröffentlicht am 30.11.2014 18:07:24 |
Als ich die Nachricht sah, dass Jack Ma noch 300 Millionen davon entfernt waren, Li Ka-shing einzuholen und der reichste Mann Asiens zu werden, musste ich innerlich schmunzeln und überprüfte schnell mein Ranking im Internet, das im Grunde unbeeinträchtigt war, und das Ranking blieb bei etwa 1,4 Milliarden – jetzt bin ich erleichtert! Tatsächlich bin ich auch ein Mensch mit Träumen, seit meiner Kindheit habe ich davon geträumt, eines Tages mit Sonnenbrille einen Lamborghini-Sportwagen mit Sonnenbrille in unsere Heimatstadt zu fahren, nach fast 20 Jahren harter Arbeit ist der Traum jetzt halb wahr, ich habe schon meine eigene Sonnenbrille, nur einen Sportwagen, der Traum wird bald Wirklichkeit, und ich bin ein wenig aufgeregt, wenn ich daran denke!
 Vermieter| Veröffentlicht am 30.11.2014 18:28:24 |

Ein Webcrawler (auch bekannt als Web Spider, Webbot, in der FOAF-Community häufiger als Web Chaser bezeichnet) ist ein Programm oder Skript, das automatisch Informationen über das World Wide Web gemäß bestimmten Regeln sammelt. Andere weniger häufig verwendete Namen sind Ameisen, Auto-Indexes, Emulatoren oder Würmer.
Veröffentlicht am 30.11.2014 17:40:16 |
Delver_Si Veröffentlicht am 30.11.2014, 17:22 Uhr
Ich möchte ein Tool schreiben, das MSSQL FTP und andere Tools explodiert, aber es ist online nicht einfach zu bedienen

Schreib es, ich steh hinter dir!  Abrisswerkzeuge sind in der Regel in .net geschrieben, und es gibt nicht viele in Java, also kannst du auch in Java schreiben!
Veröffentlicht am 30.11.2014 17:19:07 |
Ich wische ab, das ist eine gute Puppe, um ein Hacking-Werkzeug zu bauen!
Veröffentlicht am 30.11.2014 17:22:22 |
Ich habe es zuerst gesammelt, obwohl es jetzt nutzlos ist, glaube ich, dass es in Zukunft nützlich sein wird!
 Vermieter| Veröffentlicht am 30.11.2014 17:22:42 |
Ich möchte ein Tool schreiben, das MSSQL FTP und andere Tools explodiert, aber es ist online nicht einfach zu bedienen
Veröffentlicht am 30.11.2014 18:08:16 |
Wie meinst du das, ich verstehe es nicht
 Vermieter| Veröffentlicht am 30.11.2014 18:32:40 |
Admin veröffentlicht am 30.11.2014, 17:40 Uhr
Schreib es, ich steh hinter dir!  Abrisswerkzeuge sind in der Regel in .net geschrieben, und es gibt nicht viele in Java, also kannst du auch in Java schreiben!

Der mssql-Blaster im Kit kann nicht einmal meinen eigenen bombardieren,
 Vermieter| Veröffentlicht am 30.11.2014 18:33:09 |
Test veröffentlicht am 30.11.2014 18:07
Als er die Nachricht sah, dass Jack Ma immer noch 300 Millionen davon fehlte, Li Ka-shing einzuholen und der reichste Mann Asiens zu werden, machte ihm ein Klick, und er überprüfte schnell sein Ranking im Internet, und er war im Grunde nicht betroffen...

Du bist doch die Weste des Webmasters, oder?"
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com