Парсинг сайтов на c#. Часть 2. Использование WebClient

Продолжаем перевод статьи о парсинге или граббинге сайтов используя c#.

Первая часть:Парсинг сайтов на c#. Часть 1. Использование WebBrowser

Класс WebClient находится в пространстве имен SyStem.Net, он реализует возможность получения из данных интернета. С его помощью можно получить исходный код страницы HTML в виде строки или в виде файла.
Пример: Получаем исходный код страницы google.com

  1. Добавляем на форму кнопку и RichTextBox
  2. Щелкаем по кнопке два раза мышкой. Тем самым добавляя событие нажатия на кнопку
  3. Добавляем в это событие следующий код:
    WebClient wc = new WebClient();
    string answer = wc.DownloadString('http://www.google.com');
    richTextBox1.AppendText(answer);

    Используем метод DownLoadString который возвращает данные в виде строки и добавляем эту строку в richtextbox. Результат работы выглядит следующим образом:

  4. parse_site
    Далее можно применять регулярные выражений (RegEx) к полученной строке, получая необходимую информацию (например таким образом можно быстро получить, то есть провести граббинг картинок, email, ссылок и т.д.

Пример: Граббим картинки
Получив код страницы в предыдущем примере и найдя, допустим, все ссылки на изображения (как это сделать опишу позже) мы можем сохранить все картинки себе на компьютер следующим способом:

WebClient wc = new WebClient(); 
 wc.DownloadFile(@'http://jobtools.ru/wp-content/uploads/2013/04/dbfshow090-150x150.jpg', 'dbfshow.jpg');

Изображение будет скачено в папку с программой.
Первым параметром идет ссылка на изображение, во втором параметре имя файла для сохранения.
В примере ниже будет показано как заливать файлы на хостинг, таким образом можно реализовать практически автоматический парсинг картинок с определенных сайтов и добавлением их на своих ресурсах, проектах.

Пример: Блокирующий режим WebClient

  1. Добавьте следующий код в событие нажатия кнопки:
    WebClient wc = new WebClient(); 
    wc.DownloadData('http://www.yandex.ru');
  2. После того как Вы запустите проект и нажмете на кнопку, попробуйте по перемещать форму или нажать на еще какие-нибудь элементы формы. Она не будет отвечать на Ваши действия. Форма заблокирована выполнением операции считывания данных с указанного Вами сайта
  3. Почему же так происходит? Все дело в том, что загрузка строки, файла или иных данных из Интернета может занимает длительное время (зависит от скорости соединения, загруженности сервера и т.д.), а класс WebClient, в нашем примере, работает в потоке, который ответственен за отрисовку пользовательского интерфейса (UI). Это и приводит к подвисанию формы.
  4. Это значит, что поток не продолжит обработку других, последующих команд нашей программы, пока не получит все запрашиваемые данные с интернета. Это называется блокирующий режим. Выход — это использовать не блокирующий режим (асинхронный

Пример: Неблокирующий режим WebClient

  1. Используем процедуру DownloadStringAsync() — которая запустит скачивание данных с Интернета (в этом случае как строку) в отдельном потоке. Это означает, что наше приложение будет выполнятся дальше, пока данные скачиваются параллельно
    wc.DownloadStringAsync(new Uri('http://www.yandex.ru')); 
  2. Приведенный выше код скачает данные в виде строки, не блокируя приложение. Но мы не узнаем, когда данные будут полностью загружены. Для это необходимо определить событие завершения загрузки, что бы приложение могло нам сообщить об окончании операции. В данном случае мы должны добавить обработку события DownloadStringCompleted.
  3. Следующий код начнет выгрузку данных с Интернета в виде строки в неблокирующем режиме и по окончанию загрузки вызовет событие DownloadStringCompleted, тем самым уведомит.
    WebClient wc = new WebClient(); 
    wc.DownloadStringCompleted+=new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted); 
    wc.DownloadStringAsync(new Uri('http://www.yandex.ru'));
  4. Загруженная строка передается в качестве аргумента событию DownloadStringAsync, и мы её можем дальше обработать следующим способом
    void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
          //Получаем доступ к скачанной строке
            string html = e.Result;
    
         //Используем строку по своему усмотрению
         textBox1.Text = html;
     }

Пример: Загрузка файлов на хостинг

String uriString = 'FileUploadPagePath';      
// Создаем новый экземпляр WebClient

WebClient myWebClient = new WebClient();     

//Путь КУДА будем сохранять файл
     string fileName = 'File Path';      

//Заливка файла по указанному пути
//Используется метод HTTP POST

byte[] responseArray = myWebClient.UploadFile(uriString, fileName);      

// Декодируем и выводим ответ

textBox1.Text = 'Response Received. '; +  System.Text.Encoding.ASCII.GetString(responseArray);

One Reply to “Парсинг сайтов на c#. Часть 2. Использование WebClient”

  1. Получив код страницы в предыдущем примере и найдя, допустим, все ссылки на изображения
    (как это сделать опишу позже) — где можно про это найти?Спасибо.

Добавить комментарий для Aleks Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *