2014-09-04 142 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