
Web Scraping to technika używana do wydobywania danych ze stron internetowych. Pomaga zautomatyzować proces wydobywania danych ze stron internetowych i plików HTML. Jako programista C# możemy łatwo sprawdzać, przechwytywać i wyodrębniać dane, takie jak obrazy, wideo, audio itp., ze stron internetowych. W tym artykule dowiemy się, jak wykonać skrobanie stron internetowych za pomocą analizowania HTML przy użyciu języka C#.
W tym artykule zostaną omówione następujące tematy:
- Interfejs API do skrobania sieci w języku C#
- Czytaj i wyodrębniaj HTML za pomocą C#
- Sprawdź elementy dokumentu za pomocą języka C#
- Znajdź konkretny element za pomocą filtrów w C#
- Zapytanie o dane z HTML przy użyciu C#
- Wyodrębnij za pomocą selektora CSS w C#
Interfejs API do skrobania sieci w języku C#
Do skrobania stron internetowych z plików HTML lub adresów URL będziemy używać interfejsu API Aspose.HTML for .NET. Jest to zaawansowany interfejs API do przetwarzania HTML, który pozwala generować, modyfikować, wyodrębniać dane, konwertować i renderować dokumenty HTML bez zewnętrznego oprogramowania. Proszę pobierz bibliotekę DLL interfejsu API lub zainstaluj ją przy użyciu NuGet.
PM> Install-Package Aspose.Html
Czytaj i wyodrębniaj HTML za pomocą C#
Możemy czytać i wyodrębniać kod HTML z dowolnego dokumentu HTML, wykonując czynności podane poniżej:
- Załaduj dokument HTML przy użyciu klasy HTMLDocument.
- Wyświetl wewnętrzny kod HTML pliku w konsoli.
Poniższy przykładowy kod pokazuje, jak czytać i wyodrębniać zawartość HTML przy użyciu języka C#.
// Ten przykład kodu demonstruje, jak wyświetlić zawartość dokumentu HTML
// Załaduj dokument HTML
var document = new HTMLDocument(@"D:\Files\html\input.html");
// Pokaż wewnętrzny kod HTML dokumentu
Console.WriteLine(document.Body.InnerHTML);

Czytaj i wyodrębniaj kod HTML przy użyciu języka C#.
Podobnie możemy czytać i wyodrębniać kod HTML z działających witryn internetowych, jak pokazano poniżej:
// Ten przykład kodu demonstruje, jak wyświetlić zawartość aktywnego adresu URL witryny.
// Zainicjuj adres URL
Url url = new Url("https://en.wikipedia.org/wiki/HTML");
// Załaduj plik HTML przy użyciu instancji Url
HTMLDocument document = new HTMLDocument(url);
// Pokaż wewnętrzny kod HTML pliku w konsoli
Console.WriteLine(document.Body.InnerHTML);
Sprawdź elementy dokumentu za pomocą języka C#
Możemy sprawdzić dokument i jego elementy, wykonując poniższe czynności:
- Załaduj dokument HTML przy użyciu klasy HTMLDocument.
- Pobierz element HTML dokumentu.
- Pobierz pierwsze/ostatnie elementy elementu HTML.
- Wyświetl szczegóły elementu, takie jak TagName, TextContent.
Poniższy przykładowy kod pokazuje, jak sprawdzić elementy dokumentu przy użyciu języka C#.
// Ten przykład kodu demonstruje, jak sprawdzać elementy HTML.
// Załaduj dokument z pliku
string documentPath = @"D:\Files\html\input.html";
HTMLDocument document = new HTMLDocument(documentPath);
// Pobierz element HTML dokumentu
var element = document.DocumentElement;
Console.WriteLine(element.TagName); // HTML
// Pobierz ostatni element elementu HTML
element = element.LastElementChild;
Console.WriteLine(element.TagName); // BODY
// Zdobądź pierwszy element elementu body
element = element.FirstElementChild;
Console.WriteLine(element.TagName); // H1
Console.WriteLine(element.TextContent); // Header 1
Znajdź konkretny element za pomocą filtrów w C#
Możemy użyć niestandardowych filtrów, aby znaleźć konkretny element, np. pobrać wszystkie obrazy, linki itp. W tym celu API udostępnia interfejs TreeWalker. Umożliwia nawigację po drzewie lub poddrzewie dokumentu przy użyciu widoku dokumentu zdefiniowanego przez jego flagi whatToShow i filtr (jeśli istnieje). Konkretne elementy możemy znaleźć za pomocą filtrów, wykonując poniższe czynności:
- Zdefiniuj filtry przy użyciu klasy NodeFilter i zastąp metodę AcceptNode().
- Załaduj dokument HTML przy użyciu klasy HTMLDocument.
- Wywołaj metodę CreateTreeWalker(). Jako argumenty pobiera węzeł główny, co pokazać i NodeFilter.
Poniższy przykładowy kod pokazuje, jak znaleźć określone elementy przy użyciu języka C#.
// Ten przykład kodu demonstruje, jak wykonywać zapytania dotyczące danych przy użyciu filtrów.
// Załaduj dokument HTML
HTMLDocument document = new HTMLDocument(@"D:\Files\html\input.html");
// Aby rozpocząć nawigację HTML, musimy utworzyć instancję TreeWalker.
// Podane parametry oznaczają, że zaczyna chodzić od katalogu głównego dokumentu,
// iterując wszystkie węzły i korzystając z naszej niestandardowej implementacji filtra
using (var iterator = document.CreateTreeWalker(document, Dom.Traversal.Filters.NodeFilter.SHOW_ALL, new OnlyImageFilter()))
{
while (iterator.NextNode() != null)
{
// Ponieważ używamy własnego filtra, bieżący węzeł będzie zawsze instancją elementu HTMLImageElement.
// Zatem nie potrzebujemy tutaj dodatkowych walidacji.
var image = (HTMLImageElement)iterator.CurrentNode;
System.Console.WriteLine(image.Src);
// dane wyjściowe: image1.png
// dane wyjściowe: image2.png
}
}
// Ten przykład kodu demonstruje, jak zdefiniować filtr węzła.
class OnlyImageFilter : Aspose.Html.Dom.Traversal.Filters.NodeFilter
{
public override short AcceptNode(Aspose.Html.Dom.Node n)
{
// Bieżący filtr pomija wszystkie elementy z wyjątkiem elementów IMG.
return string.Equals("img", n.LocalName)
? FILTER_ACCEPT
: FILTER_SKIP;
}
}
Zapytanie o dane z HTML przy użyciu C#
Możemy również użyć zapytania XPath do wysyłania zapytań o dane z dokumentu HTML, wykonując poniższe czynności:
- Załaduj dokument HTML przy użyciu klasy HTMLDocument.
- Wywołaj metodę Evaluate(). Jako argumenty przyjmuje ciąg wyrażenia XPath, dokument i typ.
- Na koniec przejrzyj powstałe węzły i wyświetl tekst
Poniższy przykładowy kod pokazuje, jak wykonywać zapytania dotyczące danych za pomocą zapytań XPath przy użyciu języka C#.
// Ten przykład kodu demonstruje, jak wykonywać zapytania dotyczące danych przy użyciu zapytania XPath.
// Przygotuj kod HTML
var code = @"
<div class='happy'>
<div>
<span>Hello!</span>
</div>
</div>
<p class='happy'>
<span>World</span>
</p>
";
// Zainicjuj dokument na podstawie przygotowanego kodu
HTMLDocument document = new HTMLDocument(code, ".");
// Tutaj oceniamy wyrażenie XPath, w którym wybieramy wszystkie podrzędne elementy SPAN
// z elementów, których atrybut „class" jest równy „happy":
var result = document.Evaluate("//*[@class='happy']//span",
document,
null,
Aspose.Html.Dom.XPath.XPathResultType.Any,
null);
// Wykonaj iterację po powstałych węzłach
for (Aspose.Html.Dom.Node node; (node = result.IterateNext()) != null;)
{
System.Console.WriteLine(node.TextContent);
// wyjście: Witam
// wyjście: Świat!
}
Wyodrębnij za pomocą selektora CSS w C#
Możemy wyodrębnić treść HTML również za pomocą selektorów CSS. W tym celu API udostępnia metodę QuerySelectorAll(), która umożliwia nawigację po dokumencie HTML i wyszukiwanie potrzebnych elementów. Przyjmuje selektor zapytania jako parametr i zwraca pasującą listę węzłów wszystkich elementów. Możemy wysyłać zapytania za pomocą selektorów CSS, wykonując poniższe kroki:
- Załaduj dokument HTML przy użyciu klasy HTMLDocument.
- Wywołaj metodę QuerySelectorAll(). Jako argument przyjmuje selektor zapytania.
- Na koniec przejrzyj wynikową listę elementów.
Poniższy przykładowy kod pokazuje, jak wyodrębnić zawartość HTML przy użyciu selektorów CSS w języku C#.
// Zainicjuj dokument na podstawie przygotowanego kodu
HTMLDocument document = new HTMLDocument(@"D:\Files\html\input.html");
// Tutaj tworzymy selektor CSS, który wyodrębnia wszystkie elementy div
var elements = document.QuerySelectorAll("div");
// Wykonaj iterację po wynikowej liście elementów
foreach (Aspose.Html.HTMLElement element in elements)
{
System.Console.WriteLine(element.InnerHTML);
}
Zdobądź bezpłatną licencję
Wypróbuj interfejs API bez ograniczeń ewaluacyjnych, prosząc o bezpłatną licencję tymczasową.
Wniosek
W tym artykule dowiedzieliśmy się, jak:
- czytać i wyodrębniać zawartość dokumentu HTML przy użyciu C#;
- sprawdź elementy dokumentu i znajdź konkretny element z HTML;
- dane specyficzne dla zapytania i wyodrębnij dane za pomocą selektora CSS.
Poza tym możesz dowiedzieć się więcej o Aspose.HTML for .NET API, korzystając z dokumentacji. W przypadku jakichkolwiek niejasności prosimy o kontakt na forum.