|
|
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 teratasDepan:Penampil Kode Sumber Web Edisi Java
|