Читаем C# 4.0: полное руководство полностью

/* MiniCrawler: скелетный вариант поискового робота.

Применение: для запуска поискового робота укажите URI в командной строке. Например, для того чтобы начать поиск с адреса www.McGraw-Hill.com, введите следующую команду:

MiniCrawler http://McGraw-Hill.com

*/

using System;

using System.Net;

using System.IO;

class MiniCrawler {

  // Найти ссылку в строке содержимого,

  static string FindLink(string htmlstr,

    ref int startloc) {

    int i;

    int start, end;

    string uri = null;

    i = htmlstr.IndexOf("href=\"http", startloc,

      StringComparison.OrdinalIgnoreCase);

    if (i != -1) {

      start = htmlstr.IndexOf('"', i) + 1;

      end = htmlstr.IndexOf('"', start);

      uri = htmlstr.Substring(start, end - start);

      startloc = end;

    }

    return uri;

  }

  static void Main(string[] args) {

    string link = null; string str; string answer;

    int curloc; // содержит текущее положение в ответе

    if (args.Length != 1) {

      Console.WriteLine("Применение: MiniCrawler ");

      return;

    }

    string uristr = args[0]; // содержит текущий URI

    HttpWebResponse resp = null;

    try {

      do {

        Console.WriteLine("Переход по ссылке " + uristr);


        // Создать объект запроса типа WebRequest по указанному URI.

        HttpWebRequest req = (HttpWebRequest)

                    WebRequest.Create(uristr);

        uristr = null; // запретить дальнейшее использование этого URI


        // Отправить сформированный запрос и получить на него ответ,

        resp = (HttpWebResponse)req.GetResponse();

        Stream istrm = resp.GetResponseStream();


        // Заключить поток ввода в оболочку класса StreamReader.

        StreamReader rdr = new StreamReader(istrm);


        // Прочитать всю страницу,

        str = rdr.ReadToEnd();

        curloc = 0;

        do {

          // Найти следующий URI для перехода по ссылке,

          link = FindLink(str, ref curloc);

          if (link != null) {

            Console.WriteLine("Найдена ссылка: " + link);

            Console.Write("Перейти по ссылке, Искать дальше, Выйти?");

            answer = Console.ReadLine();

            if (string.Equals(answer, "П", StringComparison.OrdinalIgnoreCase)) {

              uristr = string.Copy(link); break;

            }

            else if (string.Equals(answer, "B", StringComparison.OrdinalIgnoreCase)) {

              break;

            }

            else if (string.Equals(answer, "И", StringComparison.OrdinalIgnoreCase)) {

              Console.WriteLine("Поиск следующей ссылки.");

            }

          }

          else {

            Console.WriteLine("Больше ссылок не найдено.");

            break;

          }

        } while (link.Length > 0);


        // Закрыть ответный поток,

        if (resp != null) resp.Close();

      } while (uristr != null);

    }

    catch (WebException exc) {

      Console.WriteLine("Сетевая ошибка: " + exc.Message +

      "Код состояния: " + exc.Status);

    }

    catch (ProtocolViolationException exc) {

      Console.WriteLine("Протокольная ошибка: " + exc.Message);

    }

    catch (UriFormatException exc) {

Перейти на страницу:

Похожие книги

1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT
Разработка приложений в среде Linux. Второе издание
Разработка приложений в среде Linux. Второе издание

Книга известных профессионалов в области разработки коммерческих приложений в Linux представляет СЃРѕР±РѕР№ отличный справочник для широкого круга программистов в Linux, а также тех разработчиков на языке С, которые перешли в среду Linux из РґСЂСѓРіРёС… операционных систем. РџРѕРґСЂРѕР±но рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки. Среди рассматриваемых в книге вопросов можно выделить анализ особенностей применения лицензий GNU, использование СЃРІРѕР±одно распространяемых компиляторов и библиотек, системное программирование для Linux, а также написание и отладка собственных переносимых библиотек. Р

Майкл К. Джонсон , Эрик В. Троан

Программирование, программы, базы данных