Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 29455|Jawab: 11

[Kode Sumber Java] Perayap web versi Java

[Salin tautan]
Diposting pada 30/11/2014 16.56.56 | | | |
[mw_shl_code=java,true]/**
* @author Jack.Wang
*
*/
impor java.io.BufferedReader;
impor java.io.InputStreamReader;
impor java.net.URL;
impor java.util.ArrayList;
impor java.util.HashMap;
impor java.util.HashSet;
impor java.util.LinkedHashSet;
impor java.util.regex.Matcher;
impor java.util.regex.Pattern;

Menelusuri crawler web
class publik SearchCrawler mengimplementasikan Runnable {

/*
  * robot cache disallowListCache tidak mengizinkan URL yang dicari. Protokol Robot mengatur file robots.txt di direktori root situs web,
  * Menentukan halaman mana di situs yang dapat ditelusuri untuk penelusuran terbatas.
  * Program pencarian harus melewati area ini selama pencarian, berikut adalah contoh robots.txt:
  * # robots.txt untuk http://somehost.com/ Agen Pengguna:
  * Tidak mengizinkan: /cgi-bin/
  * Tidak mengizinkan: /pendaftaran # Tidak mengizinkan robot di halaman pendaftaran
  * Tidak mengizinkan: /login
  */

private HashMap<String, ArrayList<String>> disallowListCache = HashMap<String, ArrayList<String>>();
ArrayList<String> errorList = ArrayList baru (<String>); Pesan kesalahan
Hasil ArrayList<String> = ArrayList baru (<String>); Hasil yang dicari
String startUrl; Titik awal untuk memulai pencarian Anda
int maxUrl; Jumlah maksimum URL yang diproses
String searchString; String untuk dicari
boolean caseSensitive = false; Apakah akan peka huruf besar/kecil atau tidak
boolean limitHost = false; Apakah akan menelusuri dalam host yang dibatasi

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

public ArrayList<String> getResult() {
  mengembalikan hasil;
}

public void run() { // Mulai utas pencarian
  crawl(startUrl, maxUrl, searchString, limitHost, caseSensitive);
}

Mendeteksi pemformatan URL
URL pribadi verifyUrl(String url) {
  Hanya URL HTTP yang diproses.
  if (!url.toLowerCase().startsWith("http://"))
   mengembalikan null;
  URL verifiedUrl = null;
  coba {
   verifiedUrl = URL baru(url);
  } catch (Pengecualian e) {
   mengembalikan null;
  }
  return verifiedUrl;
}

Mendeteksi apakah robot mengizinkan akses ke URL yang diberikan.
boolean pribadi isRobotAllowed(URL urlToCheck) {
  Host string = urlToCheck.getHost().toLowerCase(); Dapatkan host yang memberikan RUL
  System.out.println("tuan rumah = "+ tuan rumah);

  Dapatkan cache URL yang tidak diizinkan oleh host Anda untuk ditelusuri
  ArrayList<String> disallowList = disallowListCache.get(host);

  Jika Anda belum memiliki cache, unduh dan simpan cache.
  if (disallowList == null) {
   disallowList = ArrayList baru (<String>);
   coba {
    URL robotsFileUrl = URL baru("http://" + host + "/robots.txt");
    Pembaca BufferedReader = BufferedReader baru (
      InputStreamReader baru(robotsFileUrl.openStream()));

    Baca file robot untuk membuat daftar jalur yang tidak diizinkan untuk diakses.
    Garis string;
    sementara ((baris = pembaca.readLine()) != null) {
     if (line.indexOf("Disallow:") == 0) {// Apakah berisi "Disallow:"
      String disallowPath = line.substring("Tidak diizinkan:"
        .panjang()); Dapatkan jalur ke akses yang tidak diizinkan

      Periksa anotasi.
      int commentIndex = disallowPath.indexOf("#");
      if (commentIndex != -1) {
       disallowPath = disallowPath.substring(0,
         komentarIndeks); Hapus komentar
      }

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

    Jalur cache yang tidak diizinkan untuk diakses oleh host ini.
    disallowListCache.put(host, disallowList);
   } catch (Pengecualian e) {
    mengembalikan benar; Tidak ada file robots.txt di direktori root situs web, dan itu mengembalikan true
   }
  }

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

  mengembalikan benar;
}

private String downloadPage(URL pageUrl) {
  coba {
   Buka koneksi ke URL untuk dibaca.
   Pembaca BufferedReader = BufferedReader baru( InputStreamReader baru
     pageUrl.openStream()));

   Baca halaman ke buffer.
   Garis string;
   StringBuffer pageBuffer = StringBuffer(); baru
   sementara ((baris = pembaca.readLine()) != null) {
    halamanBuffer.append(baris);
   }

   mengembalikan halamanBuffer.toString();
  } catch (Pengecualian e) {
  }

  mengembalikan null;
}

Menghapus "www" dari URL
private String removeWwwFromUrl(String url) {
  int index = url.indexOf("://www.");
  if (indeks != -1) {
   mengembalikan url.substring(0, indeks + 3) + url.substring(indeks + 7);
  }

  Return (URL);
}

Uraikan halaman dan temukan tautannya
private ArrayList<String> retrieveLinks(URL pageUrl, String pageContents,
   HashSet crawledList, boolean limitHost) {
  Kompilasi pola pencocokan tautan dengan ekspresi reguler.
  Pola p = Pola.kompilasi"<a\\s+href\\s*=\\s*\"?(. *?) [\"|>]",
    Pattern.CASE_INSENSITIVE);
  Pencocokan m = p.pencocok(halamanIsi);

  ArrayList<String> linkList = ArrayList baru(<String>);
  sementara (m.find()) {
   Tautan string = m.group(1).trim();

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

   Lewati tautan ke halaman ini.
   if (link.charAt(0) == '#') {
    melanjutkan;
   }

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

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

   if (link.indexOf("://") == -1) {
    if (link.charAt(0) == '/') {// menangani secara mutlak
     link = "http://" + pageUrl.getHost() + ":"
       + pageUrl.getPort() + tautan;
    } else {
     File string = pageUrl.getFile();
     if (file.indexOf('/') == -1) {// menangani alamat relatif
      link = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + "/" + tautan;
     } else {
      Jalur string = file.substring(0,
        file.lastIndexOf('/') + 1);
      link = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + jalur + tautan;
     }
    }
   }

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

   link = removeWwwFromUrl(link);

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

   /* Jika Anda membatasi host, kecualikan URL yang tidak memenuhi kriteria */
   if (limitHost
     && !pageUrl.getHost().toLowerCase().equals(
       verifiedLink.getHost().toLowerCase())) {
    melanjutkan;
   }

   Lewati tautan yang telah diproses.
   if (crawledList.contains(link)) {
    melanjutkan;
   }

   linkList.add(link);
  }

  kembali (linkList);
}

Cari konten halaman web yang diunduh untuk menentukan apakah ada string pencarian tertentu di halaman tersebut

pencarian boolean privatStringMatches(String pageContents,
   String searchString, boolean caseSensitive) {
  String searchContents = pageContents;
  if (!caseSensitive) {// jika tidak peka huruf besar/kecil
   searchContents = pageContents.toLowerCase();
  }

  Pola p = Pola.kompilasi("[\\s]+");
  Istilah String[] = p.split(searchString);
  untuk (int i = 0; i < istilah.panjang; i++) {
   if (caseSensitive) {
    if (searchContents.indexOf(istilah) == -1) {
     mengembalikan false;
    }
   } else {
    if (searchContents.indexOf(istilah.toHuruf Kecil()) == -1) {
     mengembalikan false;
    }
   }
  }

  mengembalikan benar;
}

Lakukan operasi pencarian yang sebenarnya
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("Nilai URL Maks Tidak Valid.");
   System.out.println("Nilai URL Maks Tidak Valid.");
  }

  if (searchString.length() < 1) {
   errorList.add("String Pencarian Hilang.");
   System.out.println("String pencarian hilang");
  }

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

  Pindahkan www dari URL awal
  startUrl = hapusWwwFromUrl(startUrl);

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

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

   Dapatkan URL di bagian bawah daftar.
   String url = toCrawlList.iterator().next();

   Hapus URL dari daftar untuk di-crawl.
   toCrawlList.remove(url);

   Konversi url string menjadi objek URL.
   URL verifiedUrl = verifyUrl(url);

   Lewati URL jika robot tidak diizinkan untuk mengaksesnya.
   if (!isRobotAllowed(verifiedUrl)) {
    melanjutkan;
   }

   Menambahkan URL yang diproses ke crawledList
   crawledList.add(url);
   String pageContents = downloadPage(verifiedUrl);

   if (pageContents != null && pageContents.length() > 0) {
    Dapatkan tautan yang valid dari halaman
    Tautan ArrayList<String> = retrieveLinks(verifiedUrl,
      pageContents, crawledList, limitHost);

    toCrawlList.addAll(tautan);

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

  }
  mengembalikan hasil;
}

Fungsi utama
public static void main(String[] args) {
  SearchCrawler crawler = SearchCrawler baru("http://www.itsvse.com/", 100,"Delver_Si");
  Pencarian utas = Utas baru (perayap);
  System.out.println("Mulai mencari...");
  System.out.println("hasil:");
  search.start();
  coba {
   search.join();
  } catch (InterruptedException e) {
   TODO Blok tangkapan yang dihasilkan secara otomatis
   e.printStackTrace();
  }
}
}
[/mw_shl_code]

1.png (100.02 KB, Jumlah unduhan: 591)

2.png (72.18 KB, Jumlah unduhan: 596)

3.png (188.46 KB, Jumlah unduhan: 606)





Mantan:PHP menyumbang 82.2% dari situs web 100W teratas
Depan:Penampil Kode Sumber Web Edisi Java
Diposting pada 30/11/2014 18.07.24 |
Melihat berita bahwa Jack Ma masih 300 juta lagi untuk mengejar Li Ka-shing untuk menjadi orang terkaya di Asia, saya terkekeh dalam hati, dan dengan cepat memeriksa peringkat saya di Internet, yang pada dasarnya tidak terpengaruh, dan peringkatnya tetap sekitar 1,4 miliar, sekarang saya lega! Faktanya, saya juga orang yang memiliki mimpi, sejak saya masih kecil, saya bermimpi suatu hari saya akan mengendarai mobil sport Lamborghini kembali ke kampung halaman kami dengan kacamata hitam, setelah hampir 20 tahun bekerja keras, sekarang mimpi itu setengah terwujud, saya sudah memiliki kacamata hitam sendiri, hanya mobil sport, mimpi itu akan menjadi kenyataan, dan saya sedikit bersemangat ketika memikirkannya!
 Tuan tanah| Diposting pada 30/11/2014 18.28.24 |

Web crawler (juga dikenal sebagai web spider, web bot, lebih sering disebut web chaser di komunitas FOAF) adalah program atau skrip yang secara otomatis mengikis informasi tentang World Wide Web sesuai dengan aturan tertentu. Nama lain yang kurang umum digunakan adalah semut, indeks otomatis, emulator, atau worm.
Diposting pada 30/11/2014 17.40.16 |
Delver_Si Dipaparkan pada 2014-11-30 17:22
Saya ingin menulis alat untuk meledakkan mssql ftp dan alat lainnya, tetapi tidak mudah digunakan secara online

Tulislah, aku mendukung kamu!  Alat pembongkaran umumnya ditulis dalam .net, dan tidak banyak yang ditulis di Java, sehingga Anda dapat menulisnya di Java!
Diposting pada 30/11/2014 17.19.07 |
Saya menghapus, ini adalah boneka yang bagus untuk membuat alat peretasan!
Diposting pada 30/11/2014 17.22.22 |
Saya mengumpulkannya terlebih dahulu, meskipun tidak berguna sekarang, saya yakin itu akan berguna di masa depan!
 Tuan tanah| Diposting pada 30/11/2014 17.22.42 |
Saya ingin menulis alat untuk meledakkan mssql ftp dan alat lainnya, tetapi tidak mudah digunakan secara online
Diposting pada 30/11/2014 18.08.16 |
Apa maksudmu, aku tidak mengerti
 Tuan tanah| Diposting pada 30/11/2014 18.32.40 |
admin Dipaparkan pada 2014-11-30 17:40
Tulislah, aku mendukung kamu!  Alat pembongkaran umumnya ditulis dalam .net, dan tidak banyak yang ditulis di Java, sehingga Anda dapat menulisnya di Java!

Blaster mssql dalam kit bahkan tidak bisa meledakkan milikku sendiri,
 Tuan tanah| Diposting pada 30/11/2014 18.33.09 |
Tes Dipaparkan pada 2014-11-30 18:07
Melihat berita bahwa Jack Ma masih kekurangan 300 juta untuk mengejar Li Ka-shing untuk menjadi orang terkaya di Asia, hatinya berdebar-debar, dan dia dengan cepat memeriksa peringkatnya di Internet, dan dia pada dasarnya tidak terpengaruh ...

Kamu rompi webmaster, bukan?"
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com