从网页上读取文字,而不是HTML

时间:2012-06-08 00:11:22

标签: c# stream httpwebrequest webclient

我正在尝试制作一个从网页下载所有mp3的应用程序,但我不是从源代码下载它们。我正在从http://ytcracker.com/music/下载,对于列出的每首歌曲,如果您将其复制并粘贴到网址的末尾,则会显示该歌曲的链接。我正在使用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");
    }
}

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

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

3 个答案:

答案 0 :(得分:2)

我知道从HTML源代码中获取文本的最简单方法是HTML Agility Pack,而不是解析HTML,这是最简单的方法。

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

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

HTMLAgilityPack iterate all text nodes only

答案 1 :(得分: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");
                }
            }
        }

答案 2 :(得分: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");
        }
    }
}