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

Find italic paragraph text after h2 tag HtmlAgilityPack

我想抓取所有斜体和粗体文本(歌名)毕竟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 文本(艺术家姓名)。但我需要一点帮助来继续代码。

很简单我改成这个:

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

对此:

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

已经过测试,可以正常使用。

只获取歌曲名称:

结果:

Song name 1

Song name 2

如果您想要更复杂的内容,例如艺术家姓名和 his/her 歌曲。它是有效的。

    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;
            }
        }
    }

结果是: