Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 29455|Отговор: 11

[Java изходен код] Java версия на уеб crawler

[Копирай линк]
Публикувано в 30.11.2014 г. 16:56:56 ч. | | | |
[mw_shl_code=java, вярно]/**
* @author Jack.Wang
*
*/
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

Търсене на уеб краулъри
public class SearchCrawler реализира Runnable {

/*
  * disallowListCache робот за кеширане не позволява търсени URL адреси. Протоколът Robot задава robots.txt файл в кореновата директория на уебсайта,
  * Уточнява кои страници в сайта са търсени за ограничено търсене.
  * Програмата за търсене трябва да пропуска тези области по време на търсенето, ето пример за robots.txt:
  * # robots.txt за http://somehost.com/ User-agent:
  * Забранено: /cgi-bin/
  * Забране: /регистрация # Забрана на роботи на страницата за регистрация
  * Забранено на разрешаване: /login
  */

private HashMap<String, ArrayList<String>> disallowListCache = нов HashMap<String, ArrayList<String>>();
<String> ArrayList errorList = нов <String>ArrayList(); Съобщение за грешка
<String> ArrayList резултат = нов ArrayList<String>(); Търсени резултати
String startUrl; Отправна точка, в която да започнете търсенето си
int maxUrl; Максималният брой обработени URL адреси
String searchString; Низове за търсене
булев падежЧувствителен = невярно; Дали да бъде чувствителен към регистри
булево ограничениеHost = false; Дали да търсите в рамките на ограничен хост

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

public<String> ArrayList getResult() {
  резултат от връщане;
}

Public Void run() { // Стартирай темата за търсене
  crawl(startUrl, maxUrl, searchString, limitHost, caseSensitive);
}

Откриване на форматиране на URL адреси
private URL verifyUrl(String url) {
  Обработват се само HTTP URL адреси.
  if (!url.toLowerCase().startsWith("http://"))
   return null;
  URL verifiedUrl = null;
  try {
   verifiedURL = нов URL(url);
  } catch (Изключение e) {
   return null;
  }
  return verifiedUrl;
}

Открива дали роботът позволява достъп до дадения URL.
private boolean isRobotAllowed(URL urlToCheck) {
  String host = urlToCheck.getHost().toLowerCase(); Вземи хоста, който дава RUL
  System.out.println("host="+host);

  Вземете кеш с URL адреси, които вашият хост не позволява търсене
  <String> ArrayList disallowList = disallowListCache.get(host);

  Ако все още нямаш кеш, изтегли го и кеширай.
  ако (disallowList == null) {
   disallowList = нов <String>ArrayList();
   try {
    URL robotsFileUrl = нов URL("http://" + host + "/robots.txt");
    Четец на BufferedReader = нов BufferedReader(
      нов InputStreamReader(robotsFileUrl.openStream()));

    Прочетете файла на робота, за да създадете списък с пътища, които не са разрешени за достъп.
    Струнна линия;
    докато ((линия = reader.readLine()) != null) {
     if (line.indexOf("Disallow:") == 0) {// Съдържа ли "Disallow:"
      String disallowPath = line.substring("Disallow:"
        .length()); Намери пътя към забранения достъп

      Проверете за анотации.
      int commentIndex = disallowPath.indexOf("#");
      ако (commentIndex != -1) {
       disallowPath = disallowPath.substring(0,
         commentIndex); Премахнете коментара
      }

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

    Кеш пътища, до които този хост няма достъп до него.
    disallowListCache.put (host, disallowList);
   } catch (Изключение e) {
    върни се истински; В основната директория на сайта няма robots.txt файлове и връща true
   }
  }

  String file = urlToCheck.getFile();
  System.out.println("Файл getFile()="+file);
  за (int i = 0; < disallowList.size(); i++) {
   String disallow = disallowList.get(i);
   ако (file.startsWith(disallow)) {
    отговорът е фалшив;
   }
  }

  върни се истински;
}

private String downloadPage(URL pageUrl) {
  try {
   Отворете връзка към URL за четене.
   BufferedReader reader = нов BufferedReader(нов InputStreamReader(
     pageUrl.openStream()));

   Прочети страницата в буфера.
   Струнна линия;
   StringBuffer pageBuffer = нов StringBuffer();
   докато ((линия = reader.readLine()) != null) {
    pageBuffer.append(line);
   }

   return pageBuffer.toString();
  } catch (Изключение e) {
  }

  return null;
}

Премахнете "www" от URL адреса
private String removeWwwFromUrl(String url) {
  int index = url.indexOf("://www.");
  ако (индекс != -1) {
   return url.substring(0, index + 3) + url.substring(index + 7);
  }

  връщане (url);
}

Анализирай страницата и намери линка
private<String> ArrayList retrieveLinks(URL pageUrl, String pageContents,
   HashSet crawledList, boolean limitHost) {
  Компилирайте модела на съвпадение на връзката с регулярни изрази.
  Pattern p = Pattern.compile("<a\\s+href\\s*=\\s*"?(. *?) [\"|>]",
    Pattern.CASE_INSENSITIVE);
  Matcher m = p.matcher(pageContents);

  <String> ArrayList linkList = нов ArrayList<String>();
  докато (m.find()) {
   String link = m.group(1).trim();

   ако (link.length() < 1) {
    продължете;
   }

   Пропуснете линка към тази страница.
   ако (link.charAt(0) == '#') {
    продължете;
   }

   ако (link.indexOf("mailto:") != -1) {
    продължете;
   }

   ако (link.toLowerCase().indexOf("javascript") != -1) {
    продължете;
   }

   ако (link.indexOf("://") == -1) {
    if (link.charAt(0) == '/') {// се обработва абсолютно
     линк = "http://" + pageUrl.getHost() + ":"
       + pageUrl.getPort() + линк;
    } else {
     String file = pageUrl.getFile();
     ако (file.indexOf('/') == -1) {// обработва относителни адреси
      линк = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + "/" + линк;
     } else {
      Път на низовете = file.substring(0,
        file.lastIndexOf('/') + 1);
      линк = "http://" + pageUrl.getHost() + ":"
        + pageUrl.getPort() + път + връзка;
     }
    }
   }

   int index = link.indexOf('#');
   ако (индекс != -1) {
    link = link.substring(0, index);
   }

   link = removeWwwFromUrl(линк);

   URL verifiedLink = verifyUrl(link);
   ако (verifiedLink == null) {
    продължете;
   }

   /* Ако ограничавате хостовете, изключвайте тези URL адреси, които не отговарят на критериите */
   ако (limitHost
     && !pageUrl.getHost().toLowerSign().equals(
       verifiedLink.getHost().toLowerCase())) {
    продължете;
   }

   Пропуснете тези връзки, които вече са обработени.
   ако (crawledList.contains(link)) {
    продължете;
   }

   linkList.add(линк);
  }

  return (linkList);
}

Търсете съдържанието на изтеглена уеб страница, за да определите дали има определен низ за търсене на страницата

private boolean searchStringMatches(String pageContents,
   String searchString, boolean caseSensitive) {
  Низово търсенеСъдържание = страницаСъдържание;
  ако (!caseSensitive) {// ако е нечувствителен към регистри
   searchContents = pageContents.toLowerCase();
  }

  Шаблон p = Pattern.compile("[\\s]+");
  String[] термини = p.split(searchString);
  за (int i = 0; I < термини.Дължина; i++) {
   ако (caseSensitive) {
    ако (searchContents.indexOf(термини)) == -1) {
     отговорът е фалшив;
    }
   } else {
    ако (searchContents.indexOf(термини).toLowerCase()) == -1) {
     отговорът е фалшив;
    }
   }
  }

  върни се истински;
}

Извърши действителната операция за търсене
public<String> ArrayList crawl(String startUrl, int maxUrls,
   String searchString, boolean limithost, boolean caseSensitive) {

  <String> HashSet crawledList = нов HashSet<String>();
  <String> LinkedHashSet toCrawlList = нов <String>LinkedHashSet();

  ако (maxUrls < 1) {
   errorList.add ("Стойност на Invalid Max URLs.");
   System.out.println ("Стойност на невалидни максимални URL адреси.");
  }

  ако (searchString.length() < 1) {
   errorList.add ("Липсващ низ за търсене.");
   System.out.println ("Липсващ низ за търсене");
  }

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

  Преместете www от началния URL
  startUrl = removeWwwFromUrl(startUrl);

  toCrawlList.add(startUrl);
  докато (toCrawlList.size() > 0) {

   ако (maxUrls!= -1) {
    if (crawledList.size() == maxUrls) {
     прекъсване;
    }
   }

   Вземете URL в края на списъка.
   String url = toCrawlList.iterator().next();

   Премахнете URL адреса от списъка за обход.
   toCrawlList.remove(url);

   Конвертирайте URL на низ в обект URL.
   URL verifiedUrl = verifyUrl(url);

   Пропуснете URL, ако роботите нямат достъп до него.
   ако (!isRobotAllowed(verifiedUrl)) {
    продължете;
   }

   Добавете обработени URL адреси към crawledList
   crawledList.add(url);
   String pageContents = downloadPage(verifiedUrl);

   ако (pageContents != null && pageContents.length() > 0) {
    Вземете валиден линк от страницата
    <String> ArrayList links = retrieveLinks(verifiedURL,
      pageContents, crawledList, limitHost);

    toCrawlList.addAll(връзки);

    ако (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");
  Търсене на тема = нов Thread(crawler);
  System.out.println ("Започнете търсенето...");
  System.out.println("резултат:");
  search.start();
  try {
   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 уебсайта
Следващ:Java Edition Уеб прегледач на изходен код
Публикувано в 30.11.2014 г. 18:07:24 ч. |
Като видях новината, че Джак Ма все още е на 300 милиона от това да настигне Ли Ка-шинг и да стане най-богатият човек в Азия, се засмях в сърцето си и бързо проверих класацията си в интернет, която практически не беше засегната, и класацията остана около 1.4 милиарда, сега съм облекчен! Всъщност съм и човек с мечти, още от дете мечтаех, че един ден ще карам спортен автомобил Lamborghini обратно в родния ни град със слънчеви очила, след почти 20 години усилена работа, сега мечтата е наполовина сбъдната, вече имам свои слънчеви очила, само спортна кола, мечтата е на път да се превърне в реалност и малко се вълнувам, когато мисля за нея!
 Хазяин| Публикувано в 30.11.2014 г. 18:28:24 ч. |
Явно не си ми намекнал Публикувано на 2014-11-30 18:08
Какво имаш предвид, не разбирам

Уеб краулер (известен още като паяк, уеб бот, по-често наричан уеб чейсър в общността на FOAF) е програма или скрипт, който автоматично събира информация за Световната мрежа според определени правила. Други по-рядко използвани имена са мравки, автоиндекси, емулатори или червеи.
Публикувано в 30.11.2014 г. 17:40:16 ч. |
Delver_Si Публикувано на 30.11.2014 г. 17:22
Искам да напиша инструмент, който да разрушава mssql ftp и други инструменти, но не е лесен за използване онлайн

Пиши го, аз съм зад теб!  Инструментите за разрушаване обикновено са написани в .net, а има малко такива, написани на Java, така че можете да напишете такъв и на Java!
Публикувано в 30.11.2014 г. 17:19:07 ч. |
Избърсвам, това е добра кукла за създаване на инструмент за хакване!
Публикувано в 30.11.2014 г. 17:22:22 ч. |
Първо го събрах, макар че сега е безполезен, вярвам, че ще е полезен в бъдеще!
 Хазяин| Публикувано в 30.11.2014 г. 17:22:42 ч. |
Искам да напиша инструмент, който да разрушава mssql ftp и други инструменти, но не е лесен за използване онлайн
Публикувано в 30.11.2014 г. 18:08:16 ч. |
Какво имаш предвид, не разбирам
 Хазяин| Публикувано в 30.11.2014 г. 18:32:40 ч. |
Администратор публикувано на 2014-11-30 17:40
Пиши го, аз съм зад теб!  Инструментите за разрушаване обикновено са написани в .net, а има малко такива, написани на Java, така че можете да напишете такъв и на Java!

MSSQL бластерът в комплекта дори не може да стреля с моя собствен,
 Хазяин| Публикувано в 30.11.2014 г. 18:33:09 ч. |
Тестът е публикуван на 2014-11-30 18:07
Когато видя новината, че Джак Ма все още е на 300 милиона по-малко от това да настигне Ли Ка-шинг и да стане най-богатият човек в Азия, сърцето му щракна и бързо провери класацията си в интернет и практически не беше засегнат...

Ти си жилетката на уебмастъра, нали?"
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com