我正在尝试制作一个从网页下载所有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等文件夹中。
答案 0 :(得分:2)
我知道从HTML源代码中获取文本的最简单方法是HTML Agility Pack,而不是解析HTML,这是最简单的方法。
除软件外,网站上还有简单的教程。
有关使用HTML Agility Pack专门提取文本的指导,请参阅下面的问题
答案 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");
}
}
}