Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 29455|Yanıt: 11

[Java Kaynak Kodu] Web tarayıcısının Java versiyonu

[Bağlantıyı kopyala]
Yayınlandı 30.11.2014 16:56:56 | | | |
[mw_shl_code=java,doğru]/**
* @author Jack.Wang
*
*/
java.io.BufferedReader'i import et;
java.io.InputStreamReader içe aktar;
java.net.URL içe aktar;
java.util.ArrayList içe aktar;
java.util.HashMap içe aktar;
java.util.HashSet'i içe aktarmak;
java.util.LinkedHashSet'i içe aktarmak;
java.util.regex.Matcher'ı içe aktarmak;
java.util.regex.Pattern içe aktar;

Web tarayıcıları için arama
public class SearchCrawler implements Runnable {

/*
  * disallowListCache önbellek robotu aranan URL'lere izin vermez. Robot protokolü, web sitesinin kök dizininde bir robots.txt dosyası belirler,
  * Sitedeki hangi sayfaların kısıtlı arama için aranabileceğini belirtir.
  * Arama programı arama sırasında bu alanları atlamalı, işte robots.txt bir örnek:
  * # http://somehost.com/ User-agent için robots.txt:
  * İcaze verme: /cgi-bin/
  * Kayıt sayfasında yasaklanan /kayıt # Robotları yasakla
  * Girişi engelleme:
  */

private HashMap<String, <String>ArrayList> disallowListCache = yeni HashMap<String, ArrayList<String>>();
ArrayList<String> errorList = yeni ArrayList<String>(); Hata mesajı
ArrayList<String> result = yeni ArrayList<String>(); Aranan sonuçlar
String startUrl; Aramanıza başlamak için bir başlangıç noktası
int maxUrl; İşlenen maksimum URL sayısı
Dizi searchString; Aranan dizgiler
boolean caseSensitive = yanlış; Küçük harf hassasiyeti olup olmama
boolean limitHost = yanlış; Kısıtlı bir konak içinde arama yapıp yapılmaması

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

public ArrayList<String> getResult() {
  geri dönüş sonucu;
}

public void run() { // Arama dizisini başlat
  crawl(startUrl, maxUrl, searchString, limitHost, caseSensitive);
}

URL biçimlendirmesini tespit et
private URL verifyUrl(String url) {
  Sadece HTTP URL'leri işleniyor.
  if (!url.toLowerCase().startsWith("http://"))
   return null;
  URL verifiedUrl = null;
  Try {
   verifiedUrl = yeni URL(url);
  } yakalama (İstisna e) {
   return null;
  }
  return verifiedUrl;
}

Robotun verilen URL'ye erişim izni verip vermediğini tespit eder.
private boolean isRobotAllowed(URL urlToCheck) {
  String host = urlToCheck.getHost().toLowerCase(); RUL veren hostu alın
  System.out.println("host="+host);

  Sunucunuzun arama yapmasına izin vermediği URL önbelleği alın
  ArrayList<String> disallowList = disallowListCache.get(host);

  Eğer zaten önbelleğiniz yoksa, indirin ve önbelleyin.
  if (disallowList == null) {
   disallowList = yeni ArrayList<String>();
   Try {
    URL robotsFileUrl = yeni URL("http://" + host + "/robots.txt");
    BufferedReader okuyucu = yeni BufferedReader(
      new InputStreamReader(robotsFileUrl.openStream()));

    Erişilmeyen yolların listesini oluşturmak için robot dosyasını okuyun.
    String line;
    while ((line = reader.readLine()) != null) {
     if (line.indexOf("Disallow:") == 0) {// "Disallow:" içeriyor mu?
      String disallowPath = line.substring("Disallow:"
        .length()); Yasaklanan erişime giden yolu alın

      Açıklamaları kontrol edin.
      int commentIndex = disallowPath.indexOf("#");
      if (commentIndex != -1) {
       disallowPath = disallowPath.substring(0,
         commentIndex); Yorumu kaldır
      }

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

    Bu ana bilgisayarın erişemediği önbellek yolları.
    disallowListCache.put(host, disallowList);
   } yakalama (İstisna e) {
    True döner; Web sitesinin kök dizininde robots.txt dosya yok ve gerçek dosya döner.
   }
  }

  String file = urlToCheck.getFile();
  System.out.println("Dosya getFile()="+file);
  için (int i = 0; i disallowList.size() <; i++) {
   String disallow = disallowList.get(i);
   if (file.startsWith(disallow)) {
    yanlış döndür;
   }
  }

  True döner;
}

private String downloadPage(URL pageUrl) {
  Try {
   Okumak için URL'ye açık bağlantı.
   BufferedReader okuyucu = yeni BufferedReader(yeni InputStreamReader(
     pageUrl.openStream()));

   Sayfayı tampona oku.
   String line;
   StringBuffer pageBuffer = yeni StringBuffer();
   while ((line = reader.readLine()) != null) {
    pageBuffer.append(line);
   }

   pageBuffer.toString() döndür;
  } yakalama (İstisna e) {
  }

  return null;
}

URL'den "www" harfini kaldırın
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);
}

Sayfayı analiz et ve bağlantıyı bulun
private ArrayList<String> retrieveLinks(URL pageUrl, String pageContents,
   HashSet crawledList, boolean limitHost) {
  Bağlantının eşleşme desenini düzenli ifadelerle derleyin.
  Pattern p = Pattern.compile("<a\\s+href\\s*=\\s*\"?(. *?) [\"|>]",
    Pattern.CASE_INSENSITIVE);
  Eşleşen m = p.matcher(pageContents);

  ArrayList<String> linkList = yeni ArrayList<String>();
  while (m.find()) {
   Dizi bağlantısı = m.group(1).trim();

   if (link.length() < 1) {
    devam et;
   }

   Bu sayfanın bağlantısını atlayın.
   if (link.charAt(0) == '#') {
    devam et;
   }

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

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

   if (link.indexOf("://") == -1) {
    if (link.charAt(0) == '/') {// kesinlikle
     link = "http://" + pageUrl.getHost() + ":"
       + pageUrl.getPort() + bağlantı;
    } else {
     String file = pageUrl.getFile();
     if (file.indexOf('/') == -1) {// göreli adresleri işliyor
      link = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + "/" + bağlantı;
     } else {
      Dizi yolu = file.substring(0,
        file.lastIndexOf('/') + 1);
      link = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + yol + bağlantı;
     }
    }
   }

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

   link = kaldırmaWwwFromUrl(link);

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

   /* Eğer ana bilgisayarları kısıtlarsanız, kriterleri karşılamayan URL'leri hariç tutun */
   if (limitHost
     && !pageUrl.getHost().toLowerCase().equals(
       verifiedLink.getHost().toLowerCase())) {
    devam et;
   }

   Zaten işlenmiş olan bağlantıları atlayın.
   if (crawledList.contains(link)) {
    devam et;
   }

   linkList.add(link);
  }

  return (linkList);
}

İndirilmiş bir web sayfasının içeriğinde arama yapın ve sayfada belirli bir arama dizisi olup olmadığını belirleyin

private boolean searchStringMatches(String pageContents,
   String searchString, boolean caseSensitive) {
  Dizi aramasıContents = pageContents;
  if (!caseSensitive) {// if case insensitive
   searchContents = pageContents.toLowerCase();
  }

  Pattern p = Pattern.compile("[\\s]+");
  String[] termleri = p.split(searchString);
  için (int i = 0; < terim.uzunluk; i++) {
   if (caseSensitive) {
    if (searchContents.indexOf(terms) == -1) {
     yanlış döndür;
    }
   } else {
    if (searchContents.indexOf(terms.toLowerCase()) == -1) {
     yanlış döndür;
    }
   }
  }

  True döner;
}

Gerçek arama işlemini gerçekleştirin
public ArrayList<String> crawl(String startUrl, int maxUrls,
   String searchString, boolean limithost, boolean caseSensitive) {

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

  if (maxUrls < 1) {
   errorList.add("Geçersiz maksimum URL'ler değeri.");
   System.out.println ("Geçersiz Maksimum URL değeri.");
  }

  if (searchString.length() < 1) {
   errorList.add("Eksik Arama Dizesi.");
   System.out.println ("Eksik arama dizisi");
  }

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

  www'yi başlangıç URL'sinden çıkar
  startUrl = removeWwwFromUrl(startUrl);

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

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

   Listenin en altına URL verin.
   String url = toCrawlList.iterator().next();

   URL'yi tarama listesinden kaldırın.
   toCrawlList.remove(url);

   Dizinin URL'sini URL nesnesine dönüştür.
   URL verifiedUrl = verifyUrl(url);

   Robotların erişmesine izin verilmiyorsa URL'yi atlayın.
   if (!isRobotAllowed(verifiedUrl)) {
    devam et;
   }

   İşlenen URL'leri crawledList'e ekleyin
   crawledList.add(url);
   Dizi pageContents = downloadPage(verifiedUrl);

   if (pageContents != null && pageContents.length() > 0) {
    Sayfadan geçerli bir bağlantı alın
    ArrayList<String> links = retrieveLinks(verifiedUrl,
      pageContents, crawledList, limitHost);

    toCrawlList.addAll(bağlantılar);

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

  }
  geri dönüş sonucu;
}

Ana işlev
public static void main(String[] args) {
  SearchCrawler tarayıcısı = yeni SearchCrawler("http://www.itsvse.com/", 100,"Delver_Si");
  Thread search = yeni Thread (tarayıcı);
  System.out.println ("Aramaya başla...");
  System.out.println("result:");
  search.start();
  Try {
   search.join();
  } yakalama (Kesilen İstisna e) {
   TODO Otomatik olarak oluşturulan yakalama bloğu
   e.printStackTrace();
  }
}
}
[/mw_shl_code]

1.png (100.02 KB, İndirme sayısı: 591)

2.png (72.18 KB, İndirme sayısı: 596)

3.png (188.46 KB, İndirme sayısı: 606)





Önceki:PHP, en iyi 100W web sitelerinin %82,2'sini oluşturuyor
Önümüzdeki:Java Edition Web Kaynak Kodu Görüntüleyicisi
Yayınlandı 30.11.2014 18:07:24 |
Jack Ma'nın Asya'nın en zengin adamı olmak için Li Ka-shing'e yetişmek için hâlâ 300 milyon uzakta olduğu haberini görünce içimden güldüm ve hızlıca internetteki sıralamamı kontrol ettim, ki bu neredeyse hiç etkilenmedi ve sıralama yaklaşık 1,4 milyarda kaldı, şimdi rahatladım! Aslında, ben de hayalleri olan biriyim, çocukluğumdan beri bir gün güneş gözlüğüyle memleketimize Lamborghini spor arabası sürmeyi hayal ediyordum, neredeyse 20 yıl süren sıkı çalışmanın ardından, şimdi hayalim yarı yarıya gerçekleşti, zaten kendi güneş gözlüklerim var, sadece bir spor arabam var, hayal gerçeğe dönüşmek üzere ve bunu düşündüğümde biraz heyecanlanıyorum!
 Ev sahibi| Yayınlandı 30.11.2014 18:28:24 |

Web tarayıcısı (web örümceği, web botu olarak da bilinir, FOAF topluluğunda daha sık web komacası olarak adlandırılır) belirli kurallara göre Dünya Çapında Web hakkında otomatik olarak bilgi kazan bir program veya betiktir. Daha az kullanılan diğer isimler ise karıncalar, otomatik indeksler, emülatatörler veya solucanlardır.
Yayınlandı 30.11.2014 17:40:16 |
Delver_Si 2014-11-30 17:22 tarihinde yayınlandı
MSSQL ftp ve diğer araçları patlatacak bir araç yazmak istiyorum, ama çevrimiçi kullanımı kolay değil

Yaz, arkandayım!  Yıkım araçları genellikle .net ile yazılır ve Java ile yazılmış çok fazla araç yok, bu yüzden Java ile yazabilirsiniz!
Yayınlandı 30.11.2014 17:19:07 |
Sildim, bu hack aracı yapmak için iyi bir kukla!
Yayınlandı 30.11.2014 17:22:22 |
İlk ben topladım, şimdi işe yaramaz ama gelecekte işe yarayacağına inanıyorum!
 Ev sahibi| Yayınlandı 30.11.2014 17:22:42 |
MSSQL ftp ve diğer araçları patlatacak bir araç yazmak istiyorum, ama çevrimiçi kullanımı kolay değil
Yayınlandı 30.11.2014 18:08:16 |
Ne demek istiyorsun, anlamıyorum
 Ev sahibi| Yayınlandı 30.11.2014 18:32:40 |
admin 2014-11-30 17:40 tarihinde gönderildi
Yaz, arkandayım!  Yıkım araçları genellikle .net ile yazılır ve Java ile yazılmış çok fazla araç yok, bu yüzden Java ile yazabilirsiniz!

Kitteki mssql blaster benimkini bile patlatamıyor,
 Ev sahibi| Yayınlandı 30.11.2014 18:33:09 |
test 2014-11-30 18:07 tarihinde yayınlandı
Jack Ma'nın Asya'nın en zengin adamı olmak için Li Ka-shing'e yetişmek için hâlâ 300 milyon eksik olduğu haberini görünce kalbi tıkırdı ve hızlıca internetteki sıralamasını kontrol etti, neredeyse etkilenmedi...

Sen web yöneticisinin yeleği değil misin?"
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com