我想在所有 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 文字(艺术家姓名)。但我需要一些帮助来继续代码。
答案 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;
}
}
}
结果是: