0

我正在尝试制作一个从网页下载所有 mp3 的应用程序,但我没有从源代码下载它们。我从http://ytcracker.com/music/下载,对于列出的每首歌曲,如果您将其复制并粘贴到 url 的末尾,它会提供该歌曲的链接。我正在使用 WebClient 下载文件,如果我可以在网页上读取而不是 html,那么我可以这样做client.DownloadFile(url + line, path) 这是我的代码:

var url = "http://ytcracker.com/music/";
var sr = new StreamReader(WebRequest.Create(url).GetResponse().GetResponseStream());
string line;
while ((line = sr.ReadLine()) != null)
{
    MessageBox.Show("http://www.ytcracker.com/music/" + line);
    using (var client = new WebClient())
    {
        client.DownloadFile("http://www.ytcracker.com/music/" + line, @"C:\Users\Lavi\Downloads\downloadto\.mp3");
    }
}

问题是“行”获取页面的来源,而不是文本。如果有任何方法可以获取页面的文本,请帮助我。谢谢!

编辑:另外,路径在哪里,我知道它说'.mp3'而不是文件名,然后是.mp3。我将创建一个 for 循环并在每次循环时添加到列表中,直到页面全部读取完毕,然后将它们添加到 .mp3 中。所以它就像“i.mp3”,所以 mp3 将位于 1.mp3、2.mp3、3.mp3 等文件夹中。

4

3 回答 3

2

我所知道的从 HTML 源中获取文本的最简单方法(这是您在不解析 HTML 的情况下可以获得的所有内容)是HTML Agility Pack

除了软件之外,网站上还有简单的教程。

有关使用 HTML Agility Pack 提取文本的指导,请参阅下面的问题

HTMLAgilityPack 仅迭代所有文本节点

于 2012-06-08T00:15:22.107 回答
2

在您下载音乐的情况下,您需要在构建路径之前读取 href 值并确保它们是 .mp3 文件。正如 Eric J 提到的那样,HtmlAgilityPack 更易于使用。只需下载并将 dll 引用添加到您的项目,然后使用此代码。

        var url = "http://ytcracker.com/music/";
        var sr = new StreamReader(WebRequest.Create(url).GetResponse().GetResponseStream());
        HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
        htmlDoc.LoadHtml(sr.ReadToEnd());
        foreach (HtmlNode link in htmlDoc.DocumentNode.SelectNodes("//a[@href]"))
        {
            HtmlAttribute att = link.Attributes["href"];
            if (att.Value.EndsWith(".mp3"))
            {
                MessageBox.Show("http://www.ytcracker.com/music/" + att.Value);
                using (var client = new WebClient())
                {
                    client.DownloadFile("http://www.ytcracker.com/music/" + att.Value, @"C:\Users\Lavi\Downloads\downloadto\.mp3");
                }
            }
        }
于 2012-06-08T00:36:53.827 回答
0

您可以使用正则表达式。试试这个,这是你的代码 - 我只是添加正则表达式:

var url = "http://ytcracker.com/music/";
var sr = new StreamReader(WebRequest.Create(url).GetResponse().GetResponseStream());
string line;

var re = new Regex(@"<li><a href=.*mp3.>(.*)</a></li>");

while ((line = sr.ReadLine()) != null)
{
    using (var client = new WebClient())
    {
        if (re.IsMatch(line))
        {
            var match = re.Match(line);

            client.DownloadFile("http://www.ytcracker.com/music/" + match.Groups[1], @"C:\Users\Lavi\Downloads\downloadto\.mp3");
        }
    }
}
于 2012-06-08T00:28:58.327 回答