Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 29455|Ответ: 11

[исходный код Java] Java-версия веб-краулера

[Скопировать ссылку]
Опубликовано 30.11.2014 16:56:56 | | | |
[mw_shl_code=java,true]/**
* @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;

Поиск веб-краулеров
публичный класс SearchCrawler реализует Runnable {

/*
  * disallowCache robot cache ListCache не позволяет использовать поисковые 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 = новый ArrayList<String>(); Сообщение об ошибке
<String> Результат ArrayList = новый ArrayList<String>(); Результаты поиска
Строка startUrl; Отправная точка для поиска
int maxUrl; Максимальное количество обработанных URL
String searchString; Строки для поиска
булев падеж Чувствительный = ложный; Стоит ли учитывать регистры
булевой пределHost = ложный; Стоит ли искать внутри ограниченного хостинга

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-адреса.
  if (!url.toLowerCase().startsWith("http://"))
   возврат нуля;
  URL verifiedUrl = null;
  попробовать {
   verifiedURL = новый URL(url);
  } catch (Исключение e) {
   возврат нуля;
  }
  вернуть проверенный URL;
}

Определяет, позволяет ли робот получить доступ к указанному 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();
   попробовать {
    URL robotsFileUrl = новый URL("http://" + хост + "/robots.txt");
    BufferedReader = новый BufferedReader(
      новый InputStreamReader(robotsFileUrl.openStream()));

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

      Проверьте наличие примечаний.
      int commentIndex = disallowPath.indexOf("#");
      if (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; I < disallowList.size(); i++) {
   String disallow = disallowList.get(i);
   if (file.startsWith(disallow)) {
    возврат ложным;
   }
  }

  вернитесь на истину;
}

private String downloadPage(URL pageUrl) {
  попробовать {
   Откройте подключение к URL для чтения.
   BufferedReader = новый BufferedReader(новый InputStreamReader(
     pageUrl.openStream()));

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

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

  возврат нуля;
}

Удалите «www» из URL
private String removeWwwFromUrl(String url) {
  int index = url.indexOf("://www.");
  если (индекс != -1) {
   return url.substring(0, index + 3) + url.substring(index + 7);
  }

  Return (url);
}

Проанализируйте страницу и найдите ссылку
private<String> ArrayList retrieveLinks(URL pageUrl, String pageContents,
   HashSet crawledList, boolean limitHost) {
  Скомпилируйте шаблон совпадения связи с регулярными выражениями.
  Шаблон 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) {
    продолжить;
   }

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

   if (link.indexOf("mailto:") != -1) {
    продолжить;
   }

   if (link.toLowerCase().indexOf("javascript") != -1) {
    продолжить;
   }

   if (link.indexOf("://") == -1) {
    if (link.charAt(0) == '/') {// обрабатывает абсолютно
     ссылка = "http://" + pageUrl.getHost() + ":"
       + pageUrl.getPort() + ссылка;
    } else {
     String file = pageUrl.getFile();
     if (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 = удалитьWwwFromUrl(ссылка);

   URL verifiedLink = verifyUrl(link);
   if (verifiedLink == null) {
    продолжить;
   }

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

   Пропустите те ссылки, которые уже были обработаны.
   if (crawledList.contains(link)) {
    продолжить;
   }

   linkList.add(ссылка);
  }

  return (linkList);
}

Ищите содержимое загруженной веб-страницы, чтобы определить, есть ли на ней определённая поисковая строка

private boolean searchStringMatches(String pageContents,
   String searchString, boolean caseSensitive) {
  Поиск по строкамСодержание = pageContents;
  if (!caseSensitive) {// если нечувствительный к регистру
   searchContents = pageContents.toLowerCase();
  }

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

  вернитесь на истину;
}

Выполните фактическую операцию поиска
public<String> ArrayList crawl(String startUrl, int maxUrls,
   String searchString, boolean limithost, boolean caseSensitive) {

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

  if (maxUrls < 1) {
   errorList.add («Значение недопустимого максимального значения URL.»);
   System.out.println («Значение Invalid Max URLs.»);
  }

  if (searchString.length() < 1) {
   errorList.add («Отсутствующая строка поиска.»);
   System.out.println («Отсутствующая строка поиска»);
  }

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

  Уберите www из стартового URL
  startUrl = удалитьWwwFromUrl(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, если роботам нельзя к нему заходить.
   if (!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(ссылки);

    if (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 search = новый Thread(crawler);
  System.out.println («Начать поиск...»);
  System.out.println("результат:");
  search.start();
  попробовать {
   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 |

Веб-краулер (также известный как паучок, паутиновый бот, чаще называемый паутиной в сообществе FOAF) — это программа или скрипт, который автоматически собирает информацию о Всемирной паутине согласно определённым правилам. Другие менее часто используемые названия — муравьи, автоиндексы, эмуляторы или черви.
Опубликовано 30.11.2014 17:40:16 |
Delver_Si Опубликовано 2014-11-30 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