2016-11-19 26 views
0

.NETでFizzler.Systems.HtmlAgilityPack;を使用して、CSSセレクタを使用して要素を取得していました。今私は私のプロジェクトを.NETコアに移植しており、HtmlAgilityPack.NetCoreは利用可能ですが、 Fizzlerは存在しません。 CSSセレクタを使用するには?dotnetcoreのCSSセレクタ?

+0

? – Veverke

+0

@Veverke:どこかでコアを忘れていましたが、はい、.NETに.NETを移植しています –

+0

ScrapySharpやAngleSharpは、以下に示唆しているようにどうですか?彼らは仕事をしていますか? – Veverke

答えて

0

私は以下のようにHtmlAgilitypack使用:.NETでのCSSセレクタの

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(); 
0

を(それは擬似要素をサポートしていませんが)、私はいつもScrapySharpを使用。

ScrapySharp.Extensionsを使用するステートメントに追加すると、DocumentNodeなど、任意のHtmlNodeオブジェクトでCssSelectを呼び出すだけで済みます。解析およびCSS-選択するためのオールインワンパッケージ(CSSセレクタが内蔵されている)である -

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セレクタサポートが優れています。

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");