在h2标签HtmlAgilityPack之后找到斜体段落文本

时间:2016-03-03 09:23:34

标签: c# html html-agility-pack

我想在所有 h2 标记后抓取所有 斜体和粗体 文字(歌曲名称)。这是HTML代码

<h2>"Artist Name 1"></h2>

<p><br><b><i>Song Name 1</i>.</b> 2008.
<br><b>Music</b> Name Name
<br><b>Lyrics:</b> Name Name

<p><b><i>Song Name 2</i></b> 2008.
<br><b>Music</b> Name Name
<br><b>Lyrics:</b> Name Name

<h2>"Artist Name 2"></h2>

<p><br><b><i>Song Name 1</i>.</b> 2009.
<br><b>Music</b> Name Name
<br><b>Lyrics:</b> Name Name

<p><b><i>Song Name 2</i></b> 2009.
<br><b>Music</b> Name Name
<br><b>Lyrics:</b> Name Name

...

我在c#

中尝试过类似的东西
string Url = "url/page.html";
HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = web.Load(Url);

var headers = doc.DocumentNode.SelectNodes("//h2");
if (headers != null)
{
    foreach (HtmlNode item in headers)
        {
            textBox1.AppendText(item.InnerText + "\n");

        }
}

我可以抓住所有 h2 文字(艺术家姓名)。但我需要一些帮助来继续代码。

1 个答案:

答案 0 :(得分:2)

我很简单,我改变了这个:

var headers = doc.DocumentNode.SelectNodes("//h2");

到此:

 var headers = doc.DocumentNode.SelectNodes("//b/i");

它已经过测试,而且很容易。

仅获取歌曲名称:

结果:

Song name 1

Song name 2

如果你想要更复杂的东西,比如艺术家的名字和他/她的歌曲。这是有效的。

    var headers = doc.DocumentNode.SelectNodes("//h2");

    if (headers != null)
    {
        foreach (HtmlNode item in headers)
        {
            Console.WriteLine(item.InnerText); //Artist Name

            var next = item.NextSibling;

            while (next != null)
            {
                if (next.FirstChild != null && next.FirstChild.Name == "i")
                {
                    Console.WriteLine(next.InnerText); //Song Name for artist
                }

                if (next.Name == "h2")
                {
                    break;
                }

                next = next.NextSibling;
            }
        }
    }

结果是:

enter image description here