CSS dotnetcore 中的选择器?
CSS selector in dotnetcore?
我在 .NET 中使用 Fizzler.Systems.HtmlAgilityPack;
来获取使用 CSS 选择器的元素。现在我正在将我的项目移植到 .NET 核心,但似乎没有
Fizzler 虽然 HtmlAgilityPack.NetCore 可用。如何使用 CSS 选择器?
我使用了 HtmlAgilitypack,如下所示:
string url = "your URL";
HtmlWeb web = new HtmlWeb();
web.PreRequest = delegate (HttpWebRequest webRequest)
{
webRequest.Timeout = 15000;
return true;
};
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
List<HtmlNode> findclasses = doc.DocumentNode.Descendants("div").Where(d =>
d.Attributes.Contains("class") && d.Attributes["class"].Value.Contains("YourClassName")
).ToList();
对于.NET中的CSS选择器,我一直使用ScrapySharp(虽然不支持伪元素)
将 ScrapySharp.Extensions
添加到您的 using 语句中,您只需在任何 HtmlNode 对象中调用 CssSelect
,例如 DocumentNode
.
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");
}
}
}
另一种解决方案是使用 AngleSharp - 这是一个用于解析和 css-选择的一体化软件包(css 选择器是内置的)。我使用这些已经有一段时间了,但如果我没记错的话,angle sharp 提供了更好的 css 选择器支持。
Anglesharp
用法示例:
//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");
只需将 HtmlAgilityPack.CssSelectors.NetCore
NuGet 包引用添加到您的项目。
下面是如何使用 QuerySelectorAll()
方法的示例。
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(url);
IList<HtmlNode> nodes = doc.QuerySelectorAll("div .my-class[data-attr=123] > ul li");
HtmlNode node = nodes[0].QuerySelector("p.with-this-class span[data-myattr]");
我在 .NET 中使用 Fizzler.Systems.HtmlAgilityPack;
来获取使用 CSS 选择器的元素。现在我正在将我的项目移植到 .NET 核心,但似乎没有
Fizzler 虽然 HtmlAgilityPack.NetCore 可用。如何使用 CSS 选择器?
我使用了 HtmlAgilitypack,如下所示:
string url = "your URL";
HtmlWeb web = new HtmlWeb();
web.PreRequest = delegate (HttpWebRequest webRequest)
{
webRequest.Timeout = 15000;
return true;
};
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
List<HtmlNode> findclasses = doc.DocumentNode.Descendants("div").Where(d =>
d.Attributes.Contains("class") && d.Attributes["class"].Value.Contains("YourClassName")
).ToList();
对于.NET中的CSS选择器,我一直使用ScrapySharp(虽然不支持伪元素)
将 ScrapySharp.Extensions
添加到您的 using 语句中,您只需在任何 HtmlNode 对象中调用 CssSelect
,例如 DocumentNode
.
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");
}
}
}
另一种解决方案是使用 AngleSharp - 这是一个用于解析和 css-选择的一体化软件包(css 选择器是内置的)。我使用这些已经有一段时间了,但如果我没记错的话,angle sharp 提供了更好的 css 选择器支持。
Anglesharp
用法示例:
//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");
只需将 HtmlAgilityPack.CssSelectors.NetCore
NuGet 包引用添加到您的项目。
下面是如何使用 QuerySelectorAll()
方法的示例。
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(url);
IList<HtmlNode> nodes = doc.QuerySelectorAll("div .my-class[data-attr=123] > ul li");
HtmlNode node = nodes[0].QuerySelector("p.with-this-class span[data-myattr]");