1. Co to w ogóle znaczy „parsowanie HTML”?
HTML to zwykły tekst, który opisuje strukturę strony:
- nagłówki
- akapity
- linki
- obrazki
- tabele
Parsowanie HTML w C# oznacza:
wczytać kod HTML strony i wyciągnąć z niego konkretne informacje
np. tytuły, ceny, daty, treść artykułu.



Przykład z życia:
- Otwierasz stronę pogodową
- Ty widzisz temperaturę
- Program widzi tylko HTML
- My uczymy program jak znaleźć tę temperaturę w kodzie
2. Po co to się robi w aplikacjach WPF?
Najczęstsze powody:
- pobieranie danych z internetu (bez API)
- aktualności, komunikaty, ogłoszenia
- ceny, rankingi, rozkłady
- dane do projektów szkolnych (INF.04 ❤️)
W WPF:
- parsujesz HTML w logice
- a wynik pokazujesz w Label / TextBlock / ListView
3. Jak wygląda droga „od strony do danych”?
Zawsze te 4 kroki:
- Pobranie HTML strony
- Wczytanie HTML do parsera
- Wyszukanie elementów
- Wyciągnięcie tekstu / atrybutów
Zapamiętaj to – to się NIE zmienia.
4. Czym w C# parsujemy HTML?
Najprościej i najczytelniej:
👉 HtmlAgilityPack
To biblioteka, która:
- rozumie HTML jak przeglądarka
- tworzy tzw. drzewo DOM
- pozwala szukać elementów po tagach, klasach, id
5. Instalacja w Visual Studio (krok po kroku)
- Projekt WPF
- PPM na projekt → Zarządzaj pakietami NuGet
- Zakładka Przeglądaj
- Wpisz:
HtmlAgilityPack - Zainstaluj
I tyle. Nic więcej.
6. Najprostszy przykład – pobieramy HTML strony
Metoda: pobierz stronę jako tekst
using System.Net.Http;
public async Task<string> PobierzHtmlAsync(string adres)
{
using (HttpClient klient = new HttpClient())
{
return await klient.GetStringAsync(adres);
}
}
Co tu się dzieje?
HttpClient→ udaje przeglądarkęGetStringAsync→ pobiera czysty HTMLasync / await→ żeby nie zawiesić aplikacji
💡 Dlaczego async?
Bo internet jest wolny. WPF nie może się zawieszać.
7. Wczytanie HTML do parsera
using HtmlAgilityPack;
public HtmlDocument WczytajDokument(string html)
{
HtmlDocument dokument = new HtmlDocument();
dokument.LoadHtml(html);
return dokument;
}
Tu dzieje się magia:
- tekst HTML
- zamienia się w drzewo elementów
8. Jak znaleźć element w HTML?
Załóżmy, że strona ma:
<h1 class="title">Aktualności</h1>
Szukamy tego w C#
HtmlNode naglowek = dokument.DocumentNode
.SelectSingleNode("//h1[@class='title']");
Co oznacza ten zapis?
//h1→ znajdź wszystkie<h1>@class='title'→ tylko z tą klasąSelectSingleNode→ weź pierwszy pasujący
9. Jak wyciągnąć tekst?
string tekst = naglowek.InnerText;
To jest to, co człowiek widzi na stronie.
10. Całość w jednej metodzie (czytelnie dla ucznia)
public async Task<string> PobierzNaglowekAsync()
{
string html = await PobierzHtmlAsync("https://przykladowastrona.pl");
HtmlDocument dokument = new HtmlDocument();
dokument.LoadHtml(html);
HtmlNode naglowek = dokument.DocumentNode
.SelectSingleNode("//h1");
if (naglowek != null)
return naglowek.InnerText.Trim();
return "Brak danych";
}
11. Jak pokazać to w WPF?
private async void Button_Click(object sender, RoutedEventArgs e)
{
string wynik = await PobierzNaglowekAsync();
LabelWynik.Content = wynik;
}
💡 Dlaczego w Click też async?
Bo czekamy na internet.
12. Najczęstsze błędy uczniów
❌ parsowanie bez async
❌ szukanie złej klasy / taga
❌ strona ładowana JavaScriptem (HTML jest pusty)
❌ brak sprawdzania null
13. Ważna prawda (bardzo egzaminacyjna)
Parser HTML nie widzi JavaScriptu
Jeśli strona:
- ładuje dane dynamicznie
to: - HtmlAgilityPack ich nie zobaczy
Wtedy:
- albo API
- albo WebView
- albo Selenium (ciężki temat)

