Работа над парсером музыкального сайта. Нужно получить больше информации о песнях в плейлисте. После моего промаха с AngleSharp я использую HTMLAgilityPack. Так, название песни расположено, например:
<div class = "datagrid-cell cell-artist">
<div class = "ellipsis"><a class = "datagrid-label datagrid-label-main" itemprop = "byArtist" title = "Drake" href = "/ru/artist/246791">Drake</a></div></div>
Но с моим кодом я не могу получить нужный мне атрибут. Код (используйте введите сюда описание ссылки):
class Program
{
static async Task Main(string[] args)
{
HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
var client = new HttpClient();
string html = await client.GetStringAsync("https://www.deezer.com/ru/playlist/2872124702");
document.LoadHtml(html);
if (document.DocumentNode != null)
{
foreach (HtmlNode node in document.DocumentNode.Descendants("div").Where(d =>
d.Attributes.Contains("class") && d.Attributes["title"].Value.Contains("ellipsis")))
{
string title = node.SelectSingleNode(".//a").Attributes["title"].Value; //I think - need InnerText
Console.WriteLine(title);
}
Помогите, пожалуйста, я уже не знаю, как это сделать. Удачи!
давно с ним не работал, но может: foreach (var node in document.DocumentNode.SelectSingleNode("/link[@itemprop='byArtist']"))
@Дементик нет(





Мое предложение в комментарии, кажется, работает, См. рабочую версию здесь: https://dotnetfiddle.net/h8OrbG
using System;
public class Program
{
public static void Main()
{
var doc = new HtmlAgilityPack.HtmlDocument();
var html = "<div class='datagrid-cell cell-artist'><div class='ellipsis'><a class='datagrid-label datagrid-label-main' itemprop='byArtist' title='Drake' href='/ru/artist/246791'>Drake</a></div></div>";
doc.DocumentNode.AppendChild(HtmlAgilityPack.HtmlNode.CreateNode(html));
foreach (var node in doc.DocumentNode.SelectNodes("//a[@itemprop='byArtist']"))
{
Console.WriteLine(node.Attributes["title"].Value);
}
}
}
Приложение находится в режиме паузы. Ваше приложение находится в состоянии останова, но код для отображения отсутствует, так как все потоки выполняли внешний код (обычно код системы или фреймворка). System.NullReferenceException
Вы находитесь в режиме отладки... я не уверен, что вы хотите, чтобы я сделал с этим...
Пожалуйста, откройте ссылку, которую я прикрепил, и нажмите «Выполнить», вы увидите результаты внизу.
Да, это работает, но нужно использовать строку title = node.InnerText; вместо этого node.Attributes["title"].Value.
Например, веб-сайт указан в строке html