Blog Dla Programistów C#/.NET

sobota, 22 listopada 2025

Web scraping (automatyczne pobieranie danych ze stron internetowych) to technika programistyczna pozwalająca wyciągać informacje z witryn WWW za pomocą kodu. Wyobraź sobie, że potrzebujesz listy cen z witryny sklepu internetowego albo chcesz zautomatyzować zbieranie danych z wielu stron – zamiast kopiować wszystko ręcznie, możesz napisać program, który zrobi to za Ciebie. W tym artykule pokażę Ci, na czym polega web scraping w języku C# i jak zacząć go używać w praktyce. Dowiesz się, jak pobrać zawartość HTML strony, wyciągnąć z niej potrzebne informacje oraz poznasz podstawowe narzędzia przydatne przy scrapingu.

Web Scraping w C# - Jak Automatycznie Pozyskiwać Dane z Internetu

Jak zacząć web scraping w C#?


Zacznijmy od ogólnego procesu. Web scraping w C# (i w innych językach) zazwyczaj obejmuje dwa główne kroki:

1. Pobranie strony HTML – nasz program musi połączyć się z wybraną stroną i pobrać jej kod HTML (tak jak robi to przeglądarka).

2. Parsowanie i ekstrakcja danych – z pobranego HTML-a musimy wyłuskać interesujące nas fragmenty (np. teksty, linki, ceny, tabelki itp.).

Do wykonania pierwszego kroku C# oferuje wbudowane narzędzia HTTP. Najpopularniejszym jest klasa HttpClient z biblioteki .NET, która pozwala wykonywać zapytania sieciowe. Drugi krok – parsowanie HTML – ułatwia zewnętrzna biblioteka HtmlAgilityPack (dostępna przez NuGet), która umożliwia wygodne przeszukiwanie i nawigację po strukturze HTML jak po drzewie DOM.
Poniżej znajduje się prosty przykład ilustrujący oba kroki. Kod pobiera treść strony i wypisuje zawartość pierwszego nagłówka <h1> znalezionego w HTML:

using System.Net.Http;
using HtmlAgilityPack;

var url = "http://example.com";
var client = new HttpClient();
string html = await client.GetStringAsync(url);

/* Wczytaj pobrany HTML do obiektu dokumentu */
var doc = new HtmlDocument();
doc.LoadHtml(html);

/* Znajdź pierwszy element <h1> i pobierz jego tekst */
var h1Node = doc.DocumentNode.SelectSingleNode("//h1");
Console.WriteLine("Nagłówek strony: " + h1Node.InnerText);

Co robi powyższy kod?

• Nawiązuje połączenie ze stroną o podanym URL i pobiera całą zawartość HTML jako tekst.

• Wczytuje pobrany HTML do obiektu HtmlDocument (z biblioteki HtmlAgilityPack), co pozwala manipulować nim jak strukturą DOM.

• Wyszukuje w dokumencie pierwsze wystąpienie znacznika <h1> (używamy do tego zapytania XPath //h1, które oznacza "dowolny element <h1> w dokumencie").

• Wypisuje tekst wewnątrz znalezionego elementu na konsolę. W naszym przykładzie będzie to tytuł strony głównej (nagłówek <h1> ze strony example.com).

Oczywiście zamiast h1 możemy szukać dowolnych elementów – np. wszystkich linków <a>, tabel <table> czy elementów o konkretnej klasie CSS. HtmlAgilityPack udostępnia zarówno XPath, jak i selektory CSS (po doinstalowaniu odpowiedniego rozszerzenia) do wygodnego wybierania elementów. Przykładowo, aby znaleźć wszystkie linki na stronie i wypisać ich adresy URL, moglibyśmy użyć doc.DocumentNode.SelectNodes("//a") i przeiterować po wynikach.


Przydatne narzędzia i wskazówki


Na koniec warto wspomnieć o kilku dodatkowych kwestiach i narzędziach związanych z web scrapingiem w C#:

Dynamiczne strony i JavaScript: Powyższe podejście działa najlepiej dla stron statycznych, gdzie potrzebne dane są od razu w HTML. Jeśli strona generuje zawartość poprzez JavaScript (np. wymaga scrollowania lub klikania, aby załadować dane), wtedy sam HttpClient nie wystarczy – otrzymasz tylko kod HTML początkowej strony, bez wygenerowanych elementów. W takich przypadkach można sięgnąć po narzędzia automatyzujące prawdziwą przeglądarkę, jak Selenium (WebDriver dla C#) lub biblioteki headless jak Puppeteer Sharp czy Playwright. Pozwalają one uruchomić niewidocznie przeglądarkę, załadować stronę wraz z JavaScript i dopiero wtedy zebrać dane z DOM. Jest to jednak podejście bardziej zaawansowane i wolniejsze, więc stosujemy je tylko gdy jest konieczne.
    
Dobre praktyki: Zawsze upewnij się, że scrapowanie danej strony jest dozwolone i etyczne. Warto sprawdzić plik robots.txt witryny lub jej regulamin – niektóre serwisy mogą zabraniać automatycznego pobierania danych. Ponadto, nie przeciążaj serwera – wysyłaj żądania z rozsądną częstotliwością (możesz dodać opóźnienia między żądaniami), tak aby nie spamować strony setkami zapytań na sekundę. Tzw. "polite scraping" zakłada, że robot (Twój skrypt) zachowuje się uprzejmie niczym normalny użytkownik: pobiera dane w umiarkowanym tempie i respektuje ewentualne ograniczenia.
   
Inne biblioteki: HtmlAgilityPack jest najpopularniejszy w .NET do parsowania HTML, ale istnieją też alternatywy. Przykładowo AngleSharp to nowoczesna biblioteka do parsowania HTML ze wsparciem selektorów CSS, a wspomniany ScrapySharp rozszerza HtmlAgilityPack o wygodne funkcje. Wybór narzędzia zależy od preferencji i specyfiki projektu, jednak dla początkujących HAP będzie dobrą opcją na start.


Podsumowanie


Web scraping to świetny sposób na automatyzację zbierania informacji z internetu – od prostego wyciągania danych po budowanie własnych baz danych z publicznych źródeł. W C# możemy zrealizować scraping wykorzystując HttpClient do pobierania stron oraz biblioteki takie jak HtmlAgilityPack do analizy HTML i ekstrakcji interesujących nas fragmentów. Poznaliśmy podstawy tych kroków na prostym przykładzie. Oczywiście temat można rozwijać dalej – dodawać obsługę wielu stron (crawling), radzić sobie z logowaniem na strony czy zabezpieczeniami anty-botowymi, ale na początek taka wiedza w zupełności wystarczy, by zacząć eksperymentować.

Na koniec dodam, że jeśli interesuje Cię programowanie w C#/.NET od absolutnych podstaw i chcesz w krótkim czasie wejść na ścieżkę kariery programisty, to zachęcam do sprawdzenia mojego szkolenia online "Zostań Programistą .NET" (droga od zera do pracy jako młodszy programista C#/.NET w 3 miesiące). W ramach szkolenia uczymy się krok po kroku praktycznych umiejętności – takich jak opisywany wyżej web scraping i wiele innych – które przygotują Cię do pierwszej pracy w IT.

Autor artykułu:
Kazimierz Szpin
Kazimierz Szpin
CTO & Founder - FindSolution.pl
Programista C#/.NET. Specjalizuje się w Blazor, ASP.NET Core, ASP.NET MVC, ASP.NET Web API, WPF oraz Windows Forms.
Autor bloga ModestProgrammer.pl
Dodaj komentarz

Wyszukiwarka

© Copyright 2025 modestprogrammer.pl | Sztuczna Inteligencja | Regulamin | Polityka prywatności. Design by Kazimierz Szpin. Wszelkie prawa zastrzeżone.