2014-09-04 137 views
2

我在學習如何使用CsQuery遍歷dom來獲取特定的文本。使用CsQuery遍歷dom

的HTML如下:

<div class="featured-rows"> 
    <div class="row"> 
    <div class="featured odd" data-genres-filter="MA0000002613"> 
     <div class="album-cover"> 
     <div class="artist"> 
     <a href="http://www.allmusic.com/artist/half-japanese-0000555654">Half apanese</a> 
     </div> 
     <div class="title"> 
     <div class="label"> Joyful Noise </div> 
     <div class="styles"> 
     <div class="rating allmusic"> 
     <div class="rating average"> 
     <div class="headline-review"> 
    </div> 
    <div class="featured even" data-genres-filter="MA0000002572, MA0000002613"> 
    </div> 
    <div class="row"> 
    <div class="row"> 
    <div class="row"> 

我的代碼的企圖看起來是這樣的:

public void GetRows() 
     { 
      var artistName = string.Empty; 
      var html = GetHtml("http://www.allmusic.com/newreleases");    
      var rows = html.Select(".featured-rows"); 
      foreach(var row in rows) 
      {  
       var odd = row.Cq().Find(".featured odd"); 
       foreach(var artist in odd) 
       { 
        artistName = artist.Cq().Text(); 
       } 
      } 
     } 

的第一選擇.featured排的作品,但那時我不知道怎麼弄下到.artist獲取文本。

+0

如果它是一個真正的jQuery口,比你應該能夠使用.find( 「選擇」)一次。 – 2014-09-04 12:56:43

+0

有一點需要注意:「**除AMN明確授權外,您同意不復制,鏈接到(通過超鏈接或其他方式)**刮擦**,修改,出租,複製,出租,出借,出售以任何方式**全部或部分**,分發,鏡像,框架,聯合,緩存,存儲,記錄,發佈,下載,傳輸,顯示或創建AMN財產的衍生作品。 - http://www.allmusic.com/terms-of-service #NotALawyer – 2014-09-04 14:03:04

+0

我不會用這個,它只是爲了我的個人訓練。 – Andy 2014-09-04 14:05:15

回答

0
List<string> artists = html[".featured .artist a"].Select(dom=>dom.TextContent).ToList(); 

其中html ==你的CQ對象。

var odd = row.Cq().Find(".featured odd"); 

應該

var odd = row.Cq().Find(".featured.odd"); 
1

你應該嘗試類似的措施:

var html = GetHtml("http://www.allmusic.com/newreleases"); 
var query = CQ.Create(html) 
var row = query[".artist>a"]; 
string link = row.Attributes["href"]; 
string text = row.DefaultValue or row.InnerText or row.Value... 

CsQuery是JQuery的的端口,因此你可以谷歌jQuery代碼

UPDATE: 要遍歷獲得所有的藝術家和曲目

var rows = query[".featured odd"]; 
foreach(var row in rows) 
{ 
    var artistsLink = row[".artists>a"]; 
    var title = row[".title"]; 
// here do whatever you need with this 
} 
+0

謝謝你拉登科。但是如果我想循環播放每個唱片的artis和title,那該怎麼辦? – Andy 2014-09-04 13:49:20

+0

我已更新答案以反映您的其他問題。 – 2014-09-05 07:07:35