2

我正在尝试学习如何使用 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-row 的第一个选择有效,但我不知道如何深入到 .artist 来获取文本。

4

2 回答 2

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 代码

更新:遍历获取所有艺术家和标题

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
}
于 2014-09-04T13:21:58.000 回答
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");
于 2014-09-11T14:42:39.877 回答