0

我有这个页面:www.unnu.com/music-artists

需要检索所有艺术家及其链接的完整列表。

HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();

            // There are various options, set as needed
            htmlDoc.OptionFixNestedTags = true;

            // filePath is a path to a file containing the html
            htmlDoc.Load("http://www.unnu.com/music-artists");

            // Use:  htmlDoc.LoadHtml(xmlString);  to load from a string (was htmlDoc.LoadXML(xmlString)

            // ParseErrors is an ArrayList containing any errors from the Load statement
            if (htmlDoc.ParseErrors != null && htmlDoc.ParseErrors.Count() > 0)
            {
                // Handle any parse errors as required

            }
            else
            {

                if (htmlDoc.DocumentNode != null)
                {
                    HtmlAgilityPack.HtmlNode bodyNode = htmlDoc.DocumentNode.SelectSingleNode("//a");

                    if (bodyNode != null)
                    {
                        listBox1 = ????//this is not working, do not know if the code is correct and just missing here or is this all wrong.
                    }
                }
            }

拜托,我急需这个,因为这是一份工作。如果你需要我的 Skype 是 grnmalazagnr 可以添加。

4

2 回答 2

1

我不确定你想在这里做什么,但如果只是想下载和阅读 html 文件。你需要 WebClient web = new WebClient(); web.DownloadStringAsync(new Uri("www.unnu.com/music-artists")); web.DownloadStringCompleted += web_DownloadStringCompleted;

void web_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) { string HtmlPage = e.Result; }

于 2013-06-21T08:20:16.397 回答
0

我解决了这个问题谢谢:

void web_DownloadStringCompleted(对象发送者,Dow​​nloadStringCompletedEventArgs e){

            if (!e.Cancelled && e.Error == null && !String.IsNullOrEmpty(e.Result))
            {
                _artistas = new List<Artista>();
                // Aqui você pega todos os links da página
                // P.S.: Se a página mudar, você tem que alterar o pattern aqui.
                string pattern = @"\<a\shref\=[\""|\'](?<url>[^\""|\']+)[\""|\']\stitle\=[\""|\'](?<title>[^\""|\']+)[\""|\']\>(?<author>[^\<]+)\<\/a\>";
                // Busca no HTML todos os links
                MatchCollection ms = Regex.Matches(e.Result, pattern, RegexOptions.Multiline);

                Debug.WriteLine("----- OK {0} links encontrados", ms.Count);

                foreach (Match m in ms)
                {
                    // O pattern acima está dizendo onde fica o Url e onde fica o nome do artista
                    // e esses são resgatados aqui
                    Group url = m.Groups["url"];
                    Group author = m.Groups["author"];

                    if (url != null && author != null)
                    {
                        //Debug.WriteLine("author: {0}\nUrl: {1}", author.Value, url.Value);

                        // Se caso tenha encontrado o link do artista (pois há outros links na página) continua
                        if(url.Value.ToLower().IndexOf("/artist/") > -1)
                        {
                            // Adiciona um objeto Artista à lista
                            Artista artista = new Artista(author.Value, url.Value);
                            _artistas.Add(artista);
                        }
                    }
                }

                listBox1.ItemsSource = _artistas;

            }
        }
于 2013-06-21T21:20:52.030 回答