Web Scraping ist eine Technik zum Extrahieren von Daten aus Websites. Es hilft, den Prozess des Extrahierens von Daten aus Websites und HTML-Dateien zu automatisieren. Als C#-Entwickler können wir Daten wie Bilder, Videos, Audio usw. einfach von den Webseiten untersuchen, erfassen und extrahieren. In diesem Artikel lernen wir, wie man Web Scraping mit HTML-Parsing mit C# durchführt.
Folgende Themen sollen in diesem Artikel behandelt werden:
- C#-Web-Scraping-API
- Lesen und extrahieren Sie HTML mit C#
- Untersuchen Sie Dokumentelemente mit C#
- Suchen Sie bestimmte Elemente mithilfe von Filtern in C#
- Daten aus HTML mit C# abfragen
- Extrahieren mit CSS Selector in C#
C#-Web-Scraping-API
Für das Web-Scraping von HTML-Dateien oder URLs verwenden wir die API Aspose.HTML for .NET. Es ist eine fortschrittliche HTML-Verarbeitungs-API, die es ermöglicht, HTML-Dokumente ohne externe Software zu generieren, zu ändern, zu extrahieren, zu konvertieren und zu rendern. Bitte entweder die DLL der API herunterladen oder sie mit NuGet installieren.
PM> Install-Package Aspose.Html
Lesen und extrahieren Sie HTML mit C#
Wir können HTML aus jedem HTML-Dokument lesen und extrahieren, indem wir die folgenden Schritte ausführen:
- Laden Sie ein HTML-Dokument mit der Klasse HTMLDocument.
- Zeigen Sie den inneren HTML-Code der Datei in der Konsole an.
Das folgende Codebeispiel zeigt, wie HTML-Inhalte mit C# gelesen und extrahiert werden.
// Dieses Codebeispiel zeigt, wie der Inhalt eines HTML-Dokuments angezeigt wird
// HTML-Dokument laden
var document = new HTMLDocument(@"D:\Files\html\input.html");
// Inneres HTML des Dokuments anzeigen
Console.WriteLine(document.Body.InnerHTML);
Ebenso können wir HTML von Live-Websites lesen und extrahieren, wie unten gezeigt:
// Dieses Codebeispiel zeigt, wie Inhalte von Live-Website-URLs angezeigt werden.
// URL initialisieren
Url url = new Url("https://en.wikipedia.org/wiki/HTML");
// Laden Sie die HTML-Datei mit der URL-Instanz
HTMLDocument document = new HTMLDocument(url);
// Zeigt den inneren HTML-Code der Datei auf der Konsole an
Console.WriteLine(document.Body.InnerHTML);
Untersuchen Sie Dokumentelemente mit C#
Wir können das Dokument und seine Elemente überprüfen, indem wir die folgenden Schritte ausführen:
- Laden Sie ein HTML-Dokument mit der Klasse HTMLDocument.
- Rufen Sie das HTML-Element des Dokuments ab.
- Holen Sie sich das erste/letzte Element des HTML-Elements.
- Elementdetails wie TagName, TextContent anzeigen.
Das folgende Codebeispiel zeigt, wie die Dokumentelemente mit C# überprüft werden.
// Dieses Codebeispiel zeigt, wie HTML-Elemente untersucht werden.
// Laden Sie ein Dokument aus einer Datei
string documentPath = @"D:\Files\html\input.html";
HTMLDocument document = new HTMLDocument(documentPath);
// Holen Sie sich das HTML-Element des Dokuments
var element = document.DocumentElement;
Console.WriteLine(element.TagName); // HTML
// Holen Sie sich das letzte Element des HTML-Elements
element = element.LastElementChild;
Console.WriteLine(element.TagName); // BODY
// Rufen Sie das erste Element des body-Elements ab
element = element.FirstElementChild;
Console.WriteLine(element.TagName); // H1
Console.WriteLine(element.TextContent); // Header 1
Suchen Sie bestimmte Elemente mithilfe von Filtern in C#
Wir können benutzerdefinierte Filter verwenden, um ein bestimmtes Element zu finden, z. B. alle Bilder, Links usw. abrufen. Zu diesem Zweck stellt die API die TreeWalker-Schnittstelle bereit. Es ermöglicht das Navigieren in einem Dokumentbaum oder Unterbaum unter Verwendung der Ansicht des Dokuments, die durch ihre whatToShow-Flags und Filter (falls vorhanden) definiert ist. Wir können bestimmte Elemente mithilfe von Filtern finden, indem wir die folgenden Schritte ausführen:
- Definieren Sie Filter mithilfe der NodeFilter-Klasse und überschreiben Sie die AcceptNode()-Methode.
- Laden Sie ein HTML-Dokument mit der Klasse HTMLDocument.
- Rufen Sie die Methode CreateTreeWalker() auf. Als Argumente werden der Root-Knoten, das anzuzeigende Element und der NodeFilter verwendet.
Das folgende Codebeispiel zeigt, wie bestimmte Elemente mithilfe von C# gesucht werden.
// Dieses Codebeispiel zeigt, wie Daten mithilfe von Filtern abgefragt werden.
// Laden Sie ein HTML-Dokument
HTMLDocument document = new HTMLDocument(@"D:\Files\html\input.html");
// Um die HTML-Navigation zu starten, müssen wir eine Instanz von TreeWalker erstellen.
// Die angegebenen Parameter bedeuten, dass es vom Stamm des Dokuments ausgeht,
// iterieren Sie alle Knoten und verwenden Sie unsere benutzerdefinierte Implementierung des Filters
using (var iterator = document.CreateTreeWalker(document, Dom.Traversal.Filters.NodeFilter.SHOW_ALL, new OnlyImageFilter()))
{
while (iterator.NextNode() != null)
{
// Da wir unseren eigenen Filter verwenden, ist der aktuelle Knoten immer eine Instanz des HTMLImageElement.
// Daher benötigen wir hier keine zusätzlichen Validierungen.
var image = (HTMLImageElement)iterator.CurrentNode;
System.Console.WriteLine(image.Src);
// Ausgabe: image1.png
// Ausgabe: image2.png
}
}
// Dieses Codebeispiel zeigt, wie der Node-Filter definiert wird.
class OnlyImageFilter : Aspose.Html.Dom.Traversal.Filters.NodeFilter
{
public override short AcceptNode(Aspose.Html.Dom.Node n)
{
// Der aktuelle Filter überspringt alle Elemente außer IMG-Elemente.
return string.Equals("img", n.LocalName)
? FILTER_ACCEPT
: FILTER_SKIP;
}
}
Daten aus HTML mit C# abfragen
Wir können XPath Query auch verwenden, um Daten aus einem HTML-Dokument abzufragen, indem wir die folgenden Schritte ausführen:
- Laden Sie ein HTML-Dokument mit der Klasse HTMLDocument.
- Rufen Sie die Methode Evaluate() auf. Es nimmt XPath-Ausdruckszeichenfolge, Dokument und Typ als Argumente.
- Durchlaufen Sie schließlich die resultierenden Knoten und zeigen Sie Text an
Das folgende Codebeispiel zeigt, wie Daten mit XPath-Abfragen unter Verwendung von C# abgefragt werden.
// Dieses Codebeispiel zeigt, wie Daten mit einer XPath-Abfrage abgefragt werden.
// Bereiten Sie einen HTML-Code vor
var code = @"
<div class='happy'>
<div>
<span>Hello!</span>
</div>
</div>
<p class='happy'>
<span>World</span>
</p>
";
// Initialisieren Sie ein Dokument basierend auf dem vorbereiteten Code
HTMLDocument document = new HTMLDocument(code, ".");
// Hier werten wir den XPath-Ausdruck aus, in dem wir alle untergeordneten SPAN-Elemente auswählen
// aus Elementen, deren 'class'-Attribut gleich 'happy' ist:
var result = document.Evaluate("//*[@class='happy']//span",
document,
null,
Aspose.Html.Dom.XPath.XPathResultType.Any,
null);
// Iterieren Sie über die resultierenden Knoten
for (Aspose.Html.Dom.Node node; (node = result.IterateNext()) != null;)
{
System.Console.WriteLine(node.TextContent);
// Ausgabe: Hallo
// Ausgabe: Welt!
}
Extrahieren mit CSS Selector in C#
Wir können HTML-Inhalte auch mit CSS-Selektoren extrahieren. Zu diesem Zweck stellt die API die Methode QuerySelectorAll() bereit, die eine Navigation durch ein HTML-Dokument ermöglicht und die benötigten Elemente durchsucht. Es nimmt den Abfrageselektor als Parameter und gibt eine passende NodeList aller Elemente zurück. Wir können mit CSS-Selektoren abfragen, indem wir die folgenden Schritte ausführen:
- Laden Sie ein HTML-Dokument mit der Klasse HTMLDocument.
- Rufen Sie die Methode QuerySelectorAll() auf. Es nimmt den Abfrageselektor als Argument.
- Durchlaufen Sie schließlich die resultierende Liste der Elemente.
Das folgende Codebeispiel zeigt, wie Sie HTML-Inhalte mithilfe von CSS-Selektoren in C# extrahieren.
// Initialisieren Sie ein Dokument basierend auf dem vorbereiteten Code
HTMLDocument document = new HTMLDocument(@"D:\Files\html\input.html");
// Hier erstellen wir einen CSS-Selektor, der alle div-Elemente extrahiert
var elements = document.QuerySelectorAll("div");
// Iteriere über die resultierende Liste von Elementen
foreach (Aspose.Html.HTMLElement element in elements)
{
System.Console.WriteLine(element.InnerHTML);
}
Holen Sie sich eine kostenlose Lizenz
Bitte testen Sie die API ohne Evaluierungseinschränkungen, indem Sie eine kostenlose temporäre Lizenz anfordern.
Fazit
In diesem Artikel haben wir gelernt, wie man:
- lesen und extrahieren Sie den Inhalt eines HTML-Dokuments mit C#;
- Untersuchen Sie Dokumentelemente und finden Sie ein bestimmtes Element aus HTML;
- Abfragespezifische Daten und Extrahieren von Daten mit CSS Selector.
Außerdem können Sie mithilfe der Dokumentation mehr über Aspose.HTML für die .NET-API erfahren. Bei Unklarheiten können Sie uns gerne im Forum kontaktieren.