gpt4 book ai didi

c# - 通过C#从网站获取特定内容

转载 作者:太空狗 更新时间:2023-10-29 16:34:43 25 4
gpt4 key购买 nike

对于一个非商业私立学校项目,我正在创建一个软件,该软件将根据 Spotify 上当前正在播放的歌曲搜索歌词。我必须在 C# 中执行此操作(要求),但如果我愿意,我可以使用其他语言。

我找到了几个可以用来获取歌词的网站。我已经成功获取了整个 html 代码,但在那之后我不确定该怎么做。我问过我的老师,她告诉我使用 XML(我也发现它很复杂:p),所以我已经阅读了很多关于它的内容并搜索了示例,但没有找到任何似乎适用于我的案例.

是时候编写一些代码了。

假设我想从 musixmatch.com 获取歌词:

(人类可读的改变)HTML:

<span data-reactid="199">
<p class="mxm-lyrics__content" data-reactid="200">First line of the lyrics!
These words will never be ignored
I don't want a battle
</p>
<!-- react-empty: 201 -->
<div data-reactid="202">
<div class="inline_video_ad_container_container" data-reactid="203">
<div id="inline_video_ad_container" data-reactid="204">
<div class="" style="line-height:0;" data-reactid="205">
<div id="div_gpt_ad_outofpage_musixmatch_desktop_lyrics" data-reactid="206">
<script type="text/javascript">
//Really nice google ad JS which I have removed;
</script>
</div>
</div>
</div>
</div>
<p class="mxm-lyrics__content" data-reactid="207">But I got a war
More fancy lyrics
And lines
That I want to fetch
And display
Tralala
lala
Trouble!
</p>
</div>
</span>

请注意,歌词的前三行位于顶部,其余部分位于底部 <p> .还要注意两个 <p>标签具有相同的类。完整的 html 源代码可以在这里找到: view-source:https://www.musixmatch.com/lyrics/Bullet-for-My-Valentine/You-Want-a-Battle-Here%E2%80%99s-a-War片段在第 97 行左右开始。

所以在这个特定示例中有歌词,并且有相当多的代码是我不需要的。到目前为止,我已经尝试使用以下 C# 获取 html 代码:

string source = "https://www.musixmatch.com/lyrics/Bullet-for-My-Valentine/You-Want-a-Battle-Here’s-a-War";

// The HtmlWeb class is a utility class to get the HTML over HTTP
HtmlWeb htmlWeb = new HtmlWeb();

// Creates an HtmlDocument object from an URL
HtmlAgilityPack.HtmlDocument document = htmlWeb.Load(source);

// Targets a specific node
HtmlNode someNode = document.GetElementbyId("mxm - lyrics__content");

if (someNode != null)
{
Console.WriteLine(someNode);
} else
{
Console.WriteLine("Nope");
}

foreach (var node in document.DocumentNode.SelectNodes("//span/div[@id='site']/p[@class='mxm-lyrics__content']"))
{
// here is your text: node.InnerText "//div[@class='sideInfoPlayer']/span[@class='wrap']"
Console.WriteLine(node.InnerText);
}

Console.ReadKey();

整个 html 的获取有效,但提取无效。 我无法从 html 中提取歌词。因为对于这个页面,歌词不在 ID 标签中,我不能只使用 GetElementbyId . 有人能给我指出正确的方向吗?我想支持多个站点,所以我必须为不同的站点执行几次此操作。

最佳答案

解决方案之一

var htmlWeb = new HtmlWeb();
var documentNode = htmlWeb.Load(source).DocumentNode;

var findclasses = documentNode.Descendants("p")
.Where(d => d.Attributes["class"]?.Value.Contains("mxm-lyrics__content") == true);
//or
var findclasses = documentNode.SelectNodes("//p[contains(@class,'mxm-lyrics__content')]")
var text = string.Join(Environment.NewLine, findclasses.Select(x => x.InnerText));

关于c# - 通过C#从网站获取特定内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40886277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com