|
|
Postitatud 30.11.2014 16:56:56
|
|
|
|

[mw_shl_code=java, tõene]/** * @author Jack.Wang
* */ importida java.io.BufferedReader; importida java.io.InputStreamReader; importida java.net.URL; importida java.util.ArrayList; importida java.util.HashMap; importida java.util.HashSet; importida java.util.LinkedHashSet; importida java.util.regex.Matcher; import java.util.regex.Pattern;
Otsi veebikraapijaid public class SearchCrawler implements Runnable {
/* * disallowListCache vahemälurobot ei luba otsitud URL-e. Robot protokoll seab robots.txt faili veebilehe juurkaustas, * Täpsustab, millised saidi lehed on piiratud otsingu jaoks otsitavad. * Otsinguprogramm peaks otsingu käigus need alad vahele jätma, siin on näide robots.txt: * # robots.txt http://somehost.com/ Kasutaja-agendi jaoks: * Keela: /cgi-bin/ * Keela: /registreerimine # Keela robotid registreerimislehel * Keela: /login */
private HashMap<String, ArrayList<String>> disallowListCache = uus HashMap<String, ArrayList<String>>(); ArrayList<String> errorList = uus ArrayList<String>(); Veateate ArrayList<String> tulemus = uus ArrayList<String>(); Otsitud tulemused String startUrl; Lähtepunkt otsingu alustamiseks int maxUrl; Maksimaalne töödeldud URL-ide arv String searchString; Stringid, mida otsida boole'i tähteSensitive = väär; Kas olla tähetundlik või mitte boolean limitHost = väär; Kas otsida piiratud hosti sees
public SearchCrawler(String startUrl, int maxUrl, String searchString) { this.startUrl = startUrl; this.maxUrl = maxUrl; this.searchString = searchString;
}
public ArrayList<String> getResult() { tagastustulemus;
}
public void run() { // Alusta otsingulõime crawl(startUrl, maxUrl, searchString, limitHost, caseSensitive);
}
URL-i vormindamise tuvastamine private URL verifyUrl(String url) { Töödeldakse ainult HTTP URL-e. if (!url.toLowerCase().startsWith("http://")) return null; URL verifiedUrl = null; proovi { verifiedUrl = uus URL(url); } püüa (Erand e) { return null; } return verifiedUrl;
}
Tuvastab, kas robot lubab ligipääsu antud URL-ile. private boolean isRobotAllowed(URL urlToCheck) { String host = urlToCheck.getHost().toLowerCase(); Hangi host, kes annab RUL-i System.out.println("host="+host);
Hangi URL-ide vahemälu, mida host ei luba otsida ArrayList<String> disallowList = disallowListCache.get(host);
Kui sul veel vahemälu pole, laadi see alla ja salvesta vahemällu salvestamine. if (disallowList == null) { disallowList = uus ArrayList<String>(); proovi { URL robotsFileUrl = uus URL("http://" + host + "/robots.txt"); BufferedReader = uus BufferedReader( new InputStreamReader(robotsFileUrl.openStream()));
Loe robotifaili, et luua nimekiri teedest, millele ei ole lubatud ligi pääseda. Keelpilliliin; while ((line = reader.readLine()) != null) { if (line.indexOf("Disallow:") == 0) {// Kas see sisaldab "Disallow:" String disallowPath = line.substring("Disallow:" .length()); Hangi tee keelatud ligipääsu juurde
Kontrolli annotatsioone. int commentIndex = disallowPath.indexOf("#"); if (commentIndex != -1) { disallowPath = disallowPath.substring(0, commentIndex); Eemalda kommentaar }
disallowPath = disallowPath.trim(); disallowList.add(disallowPath); } }
Vahemäluteed, millele see host ei tohi ligi pääseda. disallowListCache.put(host, disallowList); } püüa (Erand e) { return true; Veebilehe juurkataloogis pole robots.txt faili ja see tagastab tõe } }
Stringifail = urlToCheck.getFile(); System.out.println("fail getFile()="+file); for (int i = 0; i < disallowList.size(); i++) { String disallow = disallowList.get(i); if (file.startsWith(disallow)) { tagasta vale; } }
return true;
}
private String downloadPage(URL pageUrl) { proovi { Ava link URL-iga lugemiseks. BufferedReader = uus BufferedReader(uus InputStreamReader( pageUrl.openStream())));
Loe lehekülg puhvrisse. Keelpilliliin; StringBuffer pageBuffer = uus StringBuffer(); while ((line = reader.readLine()) != null) { pageBuffer.append(line); }
return pageBuffer.toString(); } püüa (Erand e) { }
return null;
}
Eemalda URL-ist "www" private String removeWwwFromUrl(String url) { int index = url.indexOf("://www."); if (indeks != -1) { return url.substring(0, index + 3) + url.substring(index + 7); }
return (URL);
}
Analüüsi lehte ja leia link private ArrayList<String> retrieveLinks(URL pageUrl, string pageContents, HashSet crawledList, boolean limitHost) { Koosta lingi sobitusmuster regulaaravaldiste abil. Pattern p = Pattern.compile("<a\\s+href\\s*=\\s*\"?(. *?) [\"|>]", Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(pageContents);
ArrayList<String> linkList = uus ArrayList<String>(); samal ajal (m.find()) { String link = m.group(1).trim();
if (link.length() < 1) { jätka; }
Jäta selle lehe link vahele. if (link.charAt(0) == '#') { jätka; }
if (link.indexOf("mailto:") != -1) { jätka; }
if (link.toLowerCase().indexOf("javascript") != -1) { jätka; }
if (link.indexOf("://") == -1) { if (link.charAt(0) == '/') {// käsitleb absoluutselt link = "http://" + pageUrl.getHost() + ":" + pageUrl.getPort() + link; } muidu { String file = pageUrl.getFile(); if (file.indexOf('/') == -1) {// käsitleb suhtelisi aadresse link = "http://" + pageUrl.getHost() + ":" + pageUrl.getPort() + "/" + link; } muidu { Stringi tee = file.substring(0, file.lastIndexOf('/') + 1); link = "http://" + pageUrl.getHost() + ":" + pageUrl.getPort() + tee + link; } } }
int index = link.indexOf('#'); if (indeks != -1) { link = link.substring(0, indeks); }
link = eemalda WwwFromUrl(link);
URL verifiedLink = verifyUrl(link); if (verifiedLink == null) { jätka; }
/* Kui piirad hoste, välista need URL-id, mis ei vasta kriteeriumidele */ kui (limitHost && !pageUrl.getHost().toLowerCase().equals( verifiedLink.getHost().toLowerCase())) { jätka; }
Jäta vahele need lingid, mis on juba töödeldud. if (crawledList.contains(link)) { jätka; }
linkList.add(link); }
return (linkList);
}
Otsi allalaaditud veebilehe sisu, et teada saada, kas lehel on kindel otsingustring
private boolean searchStringMatches(String pageContents, String searchString, boolean caseSensitive) { String searchContents = pageContents; if (!caseSensitive) {// if inshocksensitive searchContents = pageContents.toLowerCase(); }
Muster p = Pattern.compile("[\\s]+"); String[] terminid = p.split(searchString); for (int i = 0; Ma < terminid.pikkus; i++) { if (caseSensitive) { if (searchContents.indexOf(terms) == -1) { tagasta vale; } } muidu { if (searchContents.indexOf(terms.toLowerCase()) == -1) { tagasta vale; } } }
return true;
}
Tee tegelik otsinguoperatsioon public ArrayList<String> crawl(string startUrl, int maxUrls, String searchString, boolean limithost, boolean caseSensitive) {
HashSet<String> crawledList = uus HashSet<String>(); LinkedHashSet<String> toCrawlList = uus LinkedHashSet<String>();
if (maxUrls < 1) { errorList.add("Kehtetud maksimaalse URL-i väärtus."); System.out.println ("Kehtetud maksimaalsete URL-ide väärtus."); }
if (searchString.length() < 1) { errorList.add("Puuduv otsingustring."); System.out.println ("Puuduv otsingustring"); }
if (errorList.size() > 0) { System.out.println("err!!"); return errorList; }
Liiguta www alg-URL-ist välja startUrl = eemalda WwwFromUrl(startUrl);
toCrawlList.add(startUrl); while (toCrawlList.size() > 0) {
if (maxUrls != -1) { if (crawledList.size() == maxUrls) { paus; } }
Leia URL nimekirja allosas. String url = toCrawlList.iterator().next();
Eemalda URL indekseerimisnimekirjast. toCrawlList.remove(url);
Teisenda stringi URL-i objektiks. URL verifiedUrl = verifyUrl(url);
Jäta URL vahele, kui robotitel pole lubatud sellele ligi pääseda. if (!isRobotAllowed(verifiedUrl)) { jätka; }
Lisa töödeldud URL-id CrawledListi crawledList.add(url); String pageContents = downloadPage(verifiedUrl);
if (pageContents != null && pageContents.length() > 0) { Hangi lehelt kehtiv link ArrayList<String> lingid = retrieveLinks(verifiedUrl, pageContents, crawledList, limitHost);
toCrawlList.addAll(lingid);
kui (searchStringMatches(pageContents, searchString, caseSensitive)) { result.add(URL); System.out.println(url); } }
} tagastustulemus;
}
Peamine funktsioon public static void main(String[] args) { SearchCrawler crawler = uus SearchCrawler("http://www.itsvse.com/", 100,"Delver_Si"); Thread search = uus Thread (roomaja); System.out.println ("Alusta otsingut..."); System.out.println("tulemus:"); search.start(); proovi { search.join(); } catch (InterruptedException e) { TODO Automaatselt genereeritud püügiblokk e.printStackTrace(); }
}
} [/mw_shl_code]
|
-
1.png
(100.02 KB, Allalaadimiste arv: 591)
-
2.png
(72.18 KB, Allalaadimiste arv: 596)
-
3.png
(188.46 KB, Allalaadimiste arv: 606)
Eelmine:PHP moodustab 82,2% suurimatest 100W veebilehtedestJärgmine:Java Edition veebilähtekoodi vaatur
|