我在.NET中使用.NET来使用CSS选择器获取元素。现在,我正在将我的项目移植到.NET核心,虽然HtmlAgilityPack.NetCore是可用的,但似乎没有什么问题。如何使用CSS选择器?
发布于 2016-11-26 09:39:03
只需将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]");来源:https://github.com/trenoncourt/HtmlAgilityPack.CssSelectors.NetCore
发布于 2016-11-19 04:27:44
我使用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();发布于 2016-11-24 08:22:30
对于.NET中的CSS选择器,我总是使用ScrapySharp (尽管它不支持伪元素)。
将ScrapySharp.Extensions添加到使用语句中,只需在任何HtmlNode对象(如DocumentNode )中调用CssSelect。
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选择器是内置的)。这已经有一段时间我使用这些,但如果我没有错的角度锐利提供了更好的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");https://stackoverflow.com/questions/40689181
复制相似问题