Парсинг сайтів на c #

Продовжуємо переклад статті про парсінгу або граббінг сайтів використовуючи c #.

Клас WebClient знаходиться в просторі імен SyStem.Net, він реалізує можливість отримання з даних інтернету. З його допомогою можна отримати вихідний код сторінки HTML у вигляді рядка або у вигляді файлу.
Приклад: Отримуємо вихідний код сторінки google.com

  1. Додаємо на форму кнопку і RichTextBox
  2. Клацаємо по кнопці два рази мишкою. Тим самим додаючи подія натискання на кнопку
  3. Додаємо в цю подію наступний код:

Використовуємо метод DownLoadString який повертає дані у вигляді рядка і додаємо цей рядок в richtextbox. Результат роботи виглядає наступним чином:

Парсинг сайтів на c #

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

Приклад: Грабба картинки
Отримавши код сторінки в попередньому прикладі і знайшовши, припустимо, всі посилання на зображення (як це зробити опишу пізніше) ми можемо зберегти всі картинки собі на комп'ютер в такий спосіб:

Приклад: Блокуючий режим WebClient

  1. Додайте наступний код в подія натискання кнопки:
  2. Після того як Ви запустите проект і натиснете на кнопку, спробуйте по переміщати форму або натиснути на ще якісь елементи форми. Вона не буде відповідати на Ваші дії. Форма заблокована виконанням операції зчитування даних з зазначеного Вами сайту
  3. Чому ж так відбувається? Вся справа в тому, що завантаження рядки, файлу або інших даних з Інтернету може займає тривалий час (залежить від швидкості з'єднання, завантаженості сервера і т.д.), а клас WebClient, в нашому прикладі, працює в потоці, який відповідальний за отрисовку призначеного для користувача інтерфейсу (UI). Це і призводить до підвисання форми.
  4. Це означає, що потік не продовжить обробку інших, наступних команд нашої програми, поки не отримає всі запитувані дані з інтернету. Це називається блокуючий режим. Вихід - це використовувати не блокуючий режим (асинхронний

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

  1. Використовуємо процедуру DownloadStringAsync () - яка запустить скачування даних з Інтернету (в цьому випадку як рядок) в окремому потоці. Це означає, що наш додаток буде виконуватися далі, поки дані викачуються паралельно
  2. Наведений вище код завантажить дані у вигляді рядка, що не блокуючи додаток. Але ми не дізнаємося, коли дані будуть повністю завантажені. Для це необхідно визначити подія завершення завантаження, що б додаток могло нам повідомити про закінчення операції. В даному випадку ми повинні додати обробку події DownloadStringCompleted.
  3. Наступний код почне вивантаження даних з Інтернету у вигляді рядка в неблокірующіх режимі і по закінченню завантаження викличе подія DownloadStringCompleted, тим самим повідомить.
  4. Завантажена рядок передається в якості аргументу події DownloadStringAsync, і ми її можемо далі обробити такий спосіб

Приклад: Завантаження файлів на хостинг

Парсинг сайтів на c #. Частина 2. Використання WebClient

Схожі статті