C# 从网页中读取文本,而不是HTML

C# 从网页中读取文本,而不是HTML,c#,stream,httpwebrequest,webclient,C#,Stream,Httpwebrequest,Webclient,我正在尝试制作一个从网页下载所有MP3的应用程序,但我不是从源代码下载。我正在从和下载列出的每首歌曲,如果你复制并粘贴到url的末尾,它会显示该歌曲的链接。我正在使用WebClient下载文件,如果我可以读取网页上的行而不是html,那么我只需执行client.DownloadFile(url+行,路径)以下是我的代码: var url = "http://ytcracker.com/music/"; var sr = new StreamReader(WebRequest.Create(url

我正在尝试制作一个从网页下载所有MP3的应用程序,但我不是从源代码下载。我正在从和下载列出的每首歌曲,如果你复制并粘贴到url的末尾,它会显示该歌曲的链接。我正在使用WebClient下载文件,如果我可以读取网页上的行而不是html,那么我只需执行
client.DownloadFile(url+行,路径)
以下是我的代码:

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等文件夹中。

我所知道的从HTML源中获取文本的最简单方法(无需解析HTML即可获得)是

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

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


我所知道的从HTML源代码中获取文本的最简单方法是

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

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


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

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");
        }
    }
}
var url=”http://ytcracker.com/music/";
var sr=newstreamreader(WebRequest.Create(url.GetResponse().GetResponseStream());
弦线;
var re=新正则表达式(@“
  • ”); 而((line=sr.ReadLine())!=null) { 使用(var client=new WebClient()) { if(关于IsMatch(线路)) { var匹配=重新匹配(行); client.DownloadFile(“http://www.ytcracker.com/music/“+match.Groups[1],@“C:\Users\Lavi\Downloads\downloadto\.mp3”); } } }
    您可以使用正则表达式。试试看,这是你的代码-我只是添加了正则表达式:

    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");
            }
        }
    }
    
    var url=”http://ytcracker.com/music/";
    var sr=newstreamreader(WebRequest.Create(url.GetResponse().GetResponseStream());
    弦线;
    var re=新正则表达式(@“
  • ”); 而((line=sr.ReadLine())!=null) { 使用(var client=new WebClient()) { if(关于IsMatch(线路)) { var匹配=重新匹配(行); client.DownloadFile(“http://www.ytcracker.com/music/“+match.Groups[1],@“C:\Users\Lavi\Downloads\downloadto\.mp3”); } } }
    在您下载音乐的情况下,在构建路径之前,您需要读取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");
                    }
                }
            }
    

    在您下载音乐的情况下,在构建路径之前,您需要读取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");
                    }
                }
            }
    

    与流行的观点相反,正则表达式并不总是最好的解决方案:-)如果他所抓取的页面发生了实质性的变化,该怎么办?使用成熟的HTML解析器修改代码要比更改正则表达式容易得多。正则表达式是一个解决方案一个解决方案,不是最好的解决方案。与流行的观点相反,正则表达式并不总是最好的解决方案:-)如果他正在抓取的页面发生了实质性的变化怎么办?使用成熟的HTML解析器修改代码要比更改正则表达式容易得多。正则表达式是一个解决方案,不是最好的解决方案。你不需要在标题前加上“C”。请参阅“”。您不需要在标题前加上“C”。请参阅“”。