0

Web ページからすべての mp3 をダウンロードするアプリを作成しようとしていますが、ソースからダウンロードしていません。http://ytcracker.com/music/からダウンロードしています。リストされている各曲をコピーして URL の末尾に貼り付けると、その曲のリンクが表示されます。私は WebClient を使用してファイルをダウンロードしています。html ではなく Web ページで readline を実行できる場合は、次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 に答える