Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 29455|Απάντηση: 11

[Πηγαίος κώδικας Java] Έκδοση Java του web crawler

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 30/11/2014 4:56:56 μ.μ. | | | |
[mw_shl_code=java,true]/**
* @author Jack.Wang
*
*/
εισαγωγή java.io.BufferedReader;
εισαγωγή java.io.InputStreamReader;
εισαγωγή java.net.URL;
εισαγωγή java.util.ArrayList;
εισαγωγή java.util.HashMap;
εισαγωγή java.util.HashSet;
εισαγωγή java.util.LinkedHashSet;
εισαγωγή java.util.regex.Matcher;
εισαγωγή java.util.regex.Pattern;

Αναζήτηση για προγράμματα ανίχνευσης ιστού
δημόσια τάξη SearchCrawler υλοποιεί το Runnable {

/*
  * Το ρομπότ προσωρινής μνήμης disallowListCache δεν επιτρέπει διευθύνσεις URL αναζήτησης. Το πρωτόκολλο Robot ορίζει ένα αρχείο robots.txt στον ριζικό κατάλογο του ιστότοπου,
  * Καθορίζει ποιες σελίδες στον ιστότοπο μπορούν να αναζητηθούν για περιορισμένη αναζήτηση.
  * Το πρόγραμμα αναζήτησης θα πρέπει να παραλείψει αυτές τις περιοχές κατά τη διάρκεια της αναζήτησης, εδώ είναι ένα παράδειγμα robots.txt:
  * # robots.txt για http://somehost.com/ User-agent:
  * Απαγόρευση: /cgi-bin/
  * Απαγόρευση: /registration # Απαγόρευση ρομπότ στη σελίδα εγγραφής
  * Απαγόρευση: /login
  */

private HashMap<String, ArrayList<String>> disallowListCache = new HashMap<String, ArrayList<String>>();
ArrayList<String> errorList = νέα ArrayList<String>(); Μήνυμα σφάλματος
Αποτέλεσμα ArrayList<String> = new ArrayList<String>(); Αναζήτηση αποτελεσμάτων
Συμβολοσειρά startUrl; Ένα σημείο εκκίνησης για να ξεκινήσετε την αναζήτησή σας
int maxUrl; Ο μέγιστος αριθμός διευθύνσεων URL που υποβάλλονται σε επεξεργασία
Συμβολοσειρά searchString; Συμβολοσειρές για αναζήτηση
boolean caseSensitive = false; Διάκριση πεζών-κεφαλαίων ή όχι
boolean limitHost = false; Αν θα γίνει αναζήτηση σε έναν περιορισμένο κεντρικό υπολογιστή

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

public ArrayList<String> getResult() {
  αποτέλεσμα επιστροφής?
}

public void run() { // Ξεκινήστε το νήμα αναζήτησης
  crawl(startUrl, maxUrl, searchString, limitHost, caseSensitive);
}

Εντοπισμός μορφοποίησης URL
private URL verifyUrl(String url) {
  Γίνεται επεξεργασία μόνο των διευθύνσεων URL HTTP.
  if (!url.toLowerCase().startsWith("http://"))
   επιστροφή null;
  URL verifiedUrl = null;
  δοκιμάστε {
   verifiedUrl = νέα διεύθυνση URL(url);
  } catch (Εξαίρεση e) {
   επιστροφή null;
  }
  επιστροφή verifiedUrl;
}

Ανιχνεύει εάν το ρομπότ επιτρέπει την πρόσβαση στη δεδομένη διεύθυνση URL.
private boolean isRobotAllowed(URL urlToCheck) {
  Συμβολοσειρά κεντρικού υπολογιστή = urlToCheck.getHost().toLowerCase(); Αποκτήστε τον οικοδεσπότη που δίνει το RUL
  System.out.println("host="+host);

  Λάβετε μια κρυφή μνήμη με διευθύνσεις URL που ο κεντρικός υπολογιστής σας δεν επιτρέπει την αναζήτηση
  ArrayList<String> disallowList = disallowListCache.get(host);

  Εάν δεν έχετε ήδη προσωρινή μνήμη, κατεβάστε την και αποθηκεύστε την στην κρυφή μνήμη.
  αν (disallowList == null) {
   disallowList = νέα ArrayList<String>();
   δοκιμάστε {
    URL robotsFileUrl = νέα διεύθυνση URL("http://" + κεντρικός υπολογιστής + "/robots.txt");
    BufferedReader reader = νέο BufferedReader(
      νέο InputStreamReader(robotsFileUrl.openStream()));

    Διαβάστε το αρχείο robot για να δημιουργήσετε μια λίστα διαδρομών στις οποίες δεν επιτρέπεται η πρόσβαση.
    Γραμμή χορδών;
    ενώ ((γραμμή = reader.readLine()) != null) {
     if (line.indexOf("Disallow:") == 0) {// Περιέχει "Disallow:"
      String disallowPath = line.substring("Απαγόρευση:"
        .length()); Λήψη της διαδρομής προς μη επιτρεπόμενη πρόσβαση

      Ελέγξτε για σχολιασμούς.
      int commentIndex = disallowPath.indexOf("#");
      if (commentIndex != -1) {
       disallowPath = disallowPath.substring(0,
         commentIndex); Κατάργηση του σχολίου
      }

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

    Διαδρομές προσωρινής αποθήκευσης στις οποίες δεν επιτρέπεται η πρόσβαση αυτού του κεντρικού υπολογιστή.
    disallowListCache.put(host, disallowList);
   } catch (Εξαίρεση e) {
    επιστροφή αληθής? Δεν υπάρχουν αρχεία robots.txt στον ριζικό κατάλογο του ιστότοπου και επιστρέφει true
   }
  }

  Αρχείο συμβολοσειράς = urlToCheck.getFile();
  System.out.println("Αρχείο getFile()="+αρχείο);
  για (int i = 0; i < disallowList.size(); i++) {
   Συμβολοσειρά disallow = disallowList.get(i);
   if (file.startsWith(disallow)) {
    επιστροφή ψευδής?
   }
  }

  επιστροφή αληθής?
}

private String downloadPage(URL pageUrl) {
  δοκιμάστε {
   Ανοίξτε τη σύνδεση στη διεύθυνση URL για ανάγνωση.
   BufferedReader reader = νέος BufferedReader(new InputStreamReader(
     pageUrl.openStream()));

   Διαβάστε τη σελίδα στο buffer.
   Γραμμή χορδών;
   StringBuffer pageBuffer = νέο StringBuffer();
   ενώ ((γραμμή = reader.readLine()) != null) {
    pageBuffer.append(γραμμή);
   }

   επιστροφή pageBuffer.toString();
  } catch (Εξαίρεση e) {
  }

  επιστροφή null;
}

Καταργήστε το "www" από τη διεύθυνση URL
private String removeWwwFromUrl(String url) {
  int index = url.indexOf("://www.");
  αν (δείκτης != -1) {
   επιστροφή url.substring(0, ευρετήριο + 3) + url.substring(ευρετήριο + 7);
  }

  επιστροφή (url);
}

Αναλύστε τη σελίδα και βρείτε τον σύνδεσμο
private ArrayList<String> retrieveLinks(URL pageUrl, String pageContents,
   HashSet crawledList, boolean limitHost) {
  Μεταγλωττίστε το μοτίβο αντιστοίχισης του συνδέσμου με κανονικές εκφράσεις.
  Μοτίβο p = Pattern.compile("<a\\s+href\\s*=\\s*\"?(. *?) [\"|>]",
    Pattern.CASE_INSENSITIVE);
  Matcher m = p.matcher(pageContents);

  ArrayList<String> linkList = νέα ArrayList<String>();
  ενώ (m.find()) {
   Σύνδεσμος συμβολοσειράς = m.group(1).trim();

   αν (link.length() < 1) {
    να συνεχίσει;
   }

   Παραλείψτε τον σύνδεσμο προς αυτήν τη σελίδα.
   if (link.charAt(0) == '#') {
    να συνεχίσει;
   }

   if (link.indexOf("mailto:") != -1) {
    να συνεχίσει;
   }

   if (link.toLowerCase().indexOf("javascript") != -1) {
    να συνεχίσει;
   }

   if (link.indexOf("://") == -1) {
    if (link.charAt(0) == '/') {// χειρίζεται απολύτως
     σύνδεσμος = "http://" + pageUrl.getHost() + ":"
       + pageUrl.getPort() + σύνδεσμος;
    } αλλιώς {
     Αρχείο συμβολοσειράς = pageUrl.getFile();
     if (file.indexOf('/') == -1) {// χειρίζεται σχετικές διευθύνσεις
      σύνδεσμος = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + "/" + σύνδεσμος;
     } αλλιώς {
      Διαδρομή συμβολοσειράς = file.substring(0,
        file.lastIndexOf('/') + 1);
      σύνδεσμος = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + διαδρομή + σύνδεσμος;
     }
    }
   }

   int index = link.indexOf('#');
   αν (δείκτης != -1) {
    σύνδεσμος = link.substring(0, ευρετήριο);
   }

   σύνδεσμος = removeWwwFromUrl(σύνδεσμος);

   URL verifiedLink = verifyUrl(σύνδεσμος);
   αν (verifiedLink == null) {
    να συνεχίσει;
   }

   /* Αν περιορίσετε τους κεντρικούς υπολογιστές, εξαιρέστε τις διευθύνσεις URL που δεν πληρούν τα κριτήρια */
   αν (limitHost
     && !pageUrl.getHost().toLowerCase().equals(
       verifiedLink.getHost().toLowerCase())) {
    να συνεχίσει;
   }

   Παραλείψτε τους συνδέσμους που έχουν ήδη υποβληθεί σε επεξεργασία.
   if (crawledList.contains(link)) {
    να συνεχίσει;
   }

   linkList.add(σύνδεσμος);
  }

  επιστροφή (linkList);
}

Αναζητήστε το περιεχόμενο μιας ιστοσελίδας που έχετε λάβει για να προσδιορίσετε εάν υπάρχει μια καθορισμένη συμβολοσειρά αναζήτησης στη σελίδα

private boolean searchStringMatches(String pageContents,
   String searchString, boolean caseSensitive) {
  Συμβολοσειρά searchContents = pageContents;
  if (!caseSensitive) {// if χωρίς διάκριση πεζών-κεφαλαίων
   searchContents = pageContents.toLowerCase();
  }

  Μοτίβο p = Pattern.compile("[\\s]+");
  Όροι συμβολοσειράς[] = p.split(searchString);
  για (int i = 0; I < όροι.μήκος; i++) {
   if (διάκριση πεζών-κεφαλαίων) {
    if (searchContents.indexOf(terms) == -1) {
     επιστροφή ψευδής?
    }
   } αλλιώς {
    if (searchContents.indexOf(terms.toLowerCase()) == -1) {
     επιστροφή ψευδής?
    }
   }
  }

  επιστροφή αληθής?
}

Εκτελέστε την πραγματική λειτουργία αναζήτησης
public ArrayList<String> crawl(String startUrl, int maxUrls,
   String searchString, boolean limithost, boolean caseSensitive) {

  HashSet<String> crawledList = νέο HashSet<String>();
  LinkedHashSet<String> toCrawlList = νέο LinkedHashSet<String>();

  if (maxUrls < 1) {
   errorList.add("Μη έγκυρη τιμή μέγιστου αριθμού διευθύνσεων URL.");
   System.out.println("Μη έγκυρη τιμή μέγιστου αριθμού διευθύνσεων URL.");
  }

  αν (searchString.length() < 1) {
   errorList.add("Λείπει η συμβολοσειρά αναζήτησης.");
   System.out.println("Λείπει η συμβολοσειρά αναζήτησης");
  }

  αν (errorList.size() > 0) {
   System.out.println("err!!");
   επιστροφή errorList;
  }

  Μετακίνηση του www από τη διεύθυνση URL έναρξης
  startUrl = κατάργησηWwwFromUrl(startUrl);

  toCrawlList.add(startUrl);
  ενώ (toCrawlList.size() > 0) {

   αν (maxUrls != -1) {
    if (crawledList.size() == maxUrls) {
     διάλειμμα;
    }
   }

   Λήψη διεύθυνσης URL στο κάτω μέρος της λίστας.
   url συμβολοσειράς = toCrawlList.iterator().next();

   Καταργήστε τη διεύθυνση URL από τη λίστα ανίχνευσης.
   toCrawlList.remove(url);

   Μετατροπή url συμβολοσειράς σε αντικείμενο URL.
   URL verifiedUrl = verifyUrl(url);

   Παραλείψτε τη διεύθυνση URL εάν δεν επιτρέπεται στα ρομπότ να έχουν πρόσβαση σε αυτήν.
   αν (!isRobotAllowed(verifiedUrl)) {
    να συνεχίσει;
   }

   Προσθήκη επεξεργασμένων διευθύνσεων URL στο crawledList
   crawledList.add(url);
   Συμβολοσειρά pageContents = downloadPage(verifiedUrl);

   if (pageContents != null && pageContents.length() > 0) {
    Λάβετε έναν έγκυρο σύνδεσμο από τη σελίδα
    ArrayList<String> links = retrieveLinks(verifiedUrl,
      pageContents, crawledList, limitHost);

    toCrawlList.addAll(σύνδεσμοι);

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

  }
  αποτέλεσμα επιστροφής?
}

κύρια λειτουργία
public static void main(String[] args) {
  SearchCrawler crawler = νέο SearchCrawler("http://www.itsvse.com/", 100,"Delver_Si");
  Αναζήτηση νήματος = νέο νήμα (ανιχνευτής);
  System.out.println("Ξεκινήστε την αναζήτηση...");
  System.out.println("αποτέλεσμα:");
  search.start();
  δοκιμάστε {
   search.join();
  } catch (InterruptedException e) {
   TODO Μπλοκ σύλληψης που δημιουργείται αυτόματα
   e.printStackTrace();
  }
}
}
[/mw_shl_code]

1.png (100.02 KB, Αριθμός λήψεων: 591)

2.png (72.18 KB, Αριθμός λήψεων: 596)

3.png (188.46 KB, Αριθμός λήψεων: 606)





Προηγούμενος:Η PHP αντιπροσωπεύει το 82.2% των κορυφαίων ιστότοπων 100W
Επόμενος:Πρόγραμμα προβολής πηγαίου κώδικα Web Java Edition
Δημοσιεύτηκε στις 30/11/2014 6:07:24 μ.μ. |
Βλέποντας την είδηση ότι ο Τζακ Μα απείχε ακόμη 300 εκατομμύρια από το να φτάσει τον Λι Κα-σινγκ για να γίνει ο πλουσιότερος άνθρωπος στην Ασία, γέλασα στην καρδιά μου και έλεγξα γρήγορα την κατάταξή μου στο Διαδίκτυο, η οποία ουσιαστικά δεν επηρεάστηκε, και η κατάταξη παρέμεινε περίπου στα 1,4 δισεκατομμύρια, τώρα είμαι ανακουφισμένος! Μάλιστα, είμαι και άνθρωπος με όνειρα, από παιδί ονειρευόμουν ότι μια μέρα θα οδηγούσα ένα σπορ αυτοκίνητο Lamborghini πίσω στη γενέτειρά μας με γυαλιά ηλίου, μετά από σχεδόν 20 χρόνια σκληρής δουλειάς, τώρα το όνειρο έχει πραγματοποιηθεί κατά το ήμισυ, έχω ήδη τα δικά μου γυαλιά ηλίου, μόνο ένα σπορ αυτοκίνητο, το όνειρο πρόκειται να γίνει πραγματικότητα και είμαι λίγο ενθουσιασμένος όταν το σκέφτομαι!
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 30/11/2014 6:28:24 μ.μ. |

Ένας ανιχνευτής ιστού (γνωστός και ως αράχνη ιστού, ένα ρομπότ ιστού, που πιο συχνά ονομάζεται κυνηγός ιστού στην κοινότητα FOAF) είναι ένα πρόγραμμα ή σενάριο που αποκόπτει αυτόματα πληροφορίες σχετικά με τον Παγκόσμιο Ιστό σύμφωνα με ορισμένους κανόνες. Άλλα λιγότερο συχνά χρησιμοποιούμενα ονόματα είναι μυρμήγκια, αυτόματα ευρετήρια, εξομοιωτές ή σκουλήκια.
Δημοσιεύτηκε στις 30/11/2014 5:40:16 μ.μ. |
Delver_Si Δημοσιεύτηκε στις 2014-11-30 17:22
Θέλω να γράψω ένα εργαλείο για να εκραγεί mssql ftp και άλλα εργαλεία, αλλά δεν είναι εύκολο να το χρησιμοποιήσω στο διαδίκτυο

Γράψε το, Φυλάω τα νώτα σου!  Τα εργαλεία κατεδάφισης είναι γενικά γραμμένα σε .net και δεν υπάρχουν πολλά γραμμένα σε Java, οπότε μπορείτε να γράψετε ένα σε Java!
Δημοσιεύτηκε στις 30/11/2014 5:19:07 μ.μ. |
Σκουπίζω, αυτή είναι μια καλή μαριονέτα για την κατασκευή ενός εργαλείου hacking!
Δημοσιεύτηκε στις 30/11/2014 5:22:22 μ.μ. |
Το μάζεψα πρώτα, αν και είναι άχρηστο τώρα, πιστεύω ότι θα είναι χρήσιμο στο μέλλον!
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 30/11/2014 5:22:42 μ.μ. |
Θέλω να γράψω ένα εργαλείο για να εκραγεί mssql ftp και άλλα εργαλεία, αλλά δεν είναι εύκολο να το χρησιμοποιήσω στο διαδίκτυο
Δημοσιεύτηκε στις 30/11/2014 6:08:16 μ.μ. |
Τι εννοείς, δεν καταλαβαίνω
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 30/11/2014 6:32:40 μ.μ. |
admin δημοσιεύτηκε στις 2014-11-30 17:40
Γράψε το, Φυλάω τα νώτα σου!  Τα εργαλεία κατεδάφισης είναι γενικά γραμμένα σε .net και δεν υπάρχουν πολλά γραμμένα σε Java, οπότε μπορείτε να γράψετε ένα σε Java!

Ο εκτοξευτής mssql στο κιτ δεν μπορεί να ανατινάξει ούτε τον δικό μου,
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 30/11/2014 6:33:09 μ.μ. |
Η δοκιμή δημοσιεύτηκε στις 2014-11-30 18:07
Βλέποντας την είδηση ότι ο Τζακ Μα έλειπε ακόμα 300 εκατομμύρια για να φτάσει τον Λι Κα-σινγκ για να γίνει ο πλουσιότερος άνθρωπος στην Ασία, η καρδιά του χτύπησε και έλεγξε γρήγορα την κατάταξή του στο Διαδίκτυο και ουσιαστικά δεν επηρεάστηκε...

Είσαι το γιλέκο του webmaster, έτσι δεν είναι;»
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com