Продолжаем перевод статьи о парсинге или граббинге сайтов используя 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);
Парсинг сайтов на c#. Часть 2. Использование WebClient
Метки:

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

  • 6 июля 2016 на 10:19
    Постоянная ссылка

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

    Ответить

Добавить комментарий

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

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных и соглашаюсь c политикой конфиденциальности *