CSS-Selektor in Dotnetcore?

.net-core c# html-agility-pack

Frage

Ich benutzte Fizzler.Systems.HtmlAgilityPack; in .NET, um Elemente mit CSS-Selektoren zu erhalten. Jetzt portiere ich mein Projekt auf .NET Core und es scheint keinen Fizzler zu geben, obwohl HtmlAgilityPack.NetCore verfügbar ist. Wie verwende ich CSS-Selektoren?

Akzeptierte Antwort


Beliebte Antwort

Für CSS-Selektoren in .NET habe ich immer ScrapySharp verwendet (obwohl es keine Pseudo-Elemente unterstützt).

Fügen ScrapySharp.Extensions Ihren using-Anweisungen ScrapySharp.Extensions , und Sie müssen CssSelect in einem beliebigen HtmlNode-Objekt wie DocumentNode aufrufen.

using ScrapySharp.Extensions;
using HtmlAgilityPack;

namespace ConsoleLab
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            HtmlWeb web = new HtmlWeb();
            var document = web.Load("your url");
            //css class selector example
            var res1 = document.DocumentNode.CssSelect(".yourClass");
            //css id selector example
            var res2 = document.DocumentNode.CssSelect("#yourID");
        }
    }
}

Eine alternative Lösung ist die Verwendung von AngleSharp - einem All-in-One-Paket für das Parsing und das Css-Selecting (css-Selektoren sind eingebaut). Es ist eine Weile her, seit ich diese benutze, aber wenn ich nicht falsch bin, bietet der Winkel sharp eine bessere CSS-Selektor-Unterstützung.

Anglesharp Anwendungsbeispiele:

    //parsing a http-served url (asynchronous, used .Result here for simplification, but this defeats the asynchronoability of the code)
    IBrowsingContext bc = BrowsingContext.New();
    Task<IDocument> doc = bc.OpenAsync("yourAddress");
    //querying a single selector match
    IElement element1 = doc.Result.QuerySelector(".yourSelector");
    //querying multiple selector matches
    IEnumerable<IElement> elements1 = doc.Result.QuerySelectorAll(".yourSelectors");

    //parsing a physical html document, non-network dependent
    HtmlParser parser = new HtmlParser();
    IHtmlDocument doc2 = parser.Parse("htmlFile");
    IElement element2 = doc.Result.QuerySelector(".yourSelector");
    IEnumerable<IElement> elements2 = doc.Result.QuerySelectorAll(".yourSelectors");


Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum