如何从html网页中获取特定数据

本文关键字:获取 数据 网页 html | 更新日期: 2023-09-27 18:00:11

我正在WPF中制作一个mp3歌曲提取器。它所做的是从网页中获取所有结果。我遇到的问题是,它获取不相关的数据,如标签、链接(而不是下载的)等。

我想要的是从网页上只获取结果和下载链接,并将其显示在列表框中。

如有任何帮助,我们将不胜感激!!

通过此链接点赞:http://mp3skull.com/mp3/move_that_dope.html

如何从html网页中获取特定数据

使用HtmlAgilityPack可以非常简单地做到这一点。您只需加载文档,然后使用简单的XPath表达式选择所需的标记:

using HtmlAgilityPack;
using System;
using System.Text;
namespace com.mp3skull.scrapper
{
    class Program
    {
        private static void Main(string[] args)
        {
            var p = new Program();
            HtmlNodeCollection songs = p.GetSongNodesFromPage("http://mp3skull.com/mp3/move_that_dope.html");
            p.WriteSongsToConsole(songs);
            Console.WriteLine("Press any key to continue..");
            Console.ReadKey();
        }
        private readonly HtmlWeb web = new HtmlWeb();
        private HtmlNodeCollection GetSongNodesFromPage(string pageUri)
        {
            HtmlDocument document = web.Load(pageUri);
            HtmlNode documentNode = document.DocumentNode;
            return documentNode.SelectNodes("//div[@id='song_html']");
        }
        private void WriteSongsToConsole(HtmlNodeCollection songs)
        {
            foreach (HtmlNode s in songs)
            {
                HtmlNode titleNode = s.SelectSingleNode(".//b"); // Title is bold
                string title = titleNode.InnerText;
                HtmlNode downloadLinkNode = s.SelectSingleNode(".//a[@style='color:green;']");  // Download links is green
                string downloadLink = downloadLinkNode.Attributes["href"].Value;
                HtmlNode songInfoNode = s.SelectSingleNode("./div[@class='left']");
                string songInfo = GetSongInfoLine(songInfoNode);
                Console.WriteLine("Title: {0}'t", title);
                Console.WriteLine("Information: {0}'t", songInfo);
                Console.WriteLine("Download link: {0}'t", downloadLink);
                Console.WriteLine();
            }
        }
        private string GetSongInfoLine(HtmlNode songInfoNode)
        {
            var textNodes = songInfoNode.Descendants("#text");
            var infoBuilder = new StringBuilder();
            foreach (var node in textNodes)
            {
                if (infoBuilder.Length > 0)
                {
                    infoBuilder.Append(", ");
                }
                infoBuilder.Append(node.InnerText.Trim());
            }
            return infoBuilder.ToString();
        }
    }
}

如果你不知道从哪里开始,那么学习正则表达式就是最好的选择。

使用正则表达式,您可以将HTML代码分解为相关的标记,然后做任何您想做的事情

这个地方确实是我所知道的关于regex最好的地方之一:http://www.regular-expressions.info/

此外,对于测试正则表达式,有一个名为正则表达式教练的漂亮工具,对于测试和学习正则表达式非常有用:http://www.weitz.de/regex-coach/