0

私は正確に何を意味するのかを説明しようとします。私はプログラムに取り組んでおり、このサイトから大量の画像を自動的にダウンロードしようとしています。

つまり、ヒーロー名をクリックすると表示されるページから大きな四角形のアイコンをダウンロードしたいと考えDariusSquare.pngています。

これは可能ですか、それとも C# に求めすぎですか?

どうもありがとうございました!

4

2 に答える 2

1

一般的に、十分な時間とお金があれば、すべてが可能です。あなたの場合、前者はほとんど必要なく、後者は必要ありません:)

あなたがする必要があることは、次の高レベルのステップで説明することができます:

  • <a>ヒーローと一緒にテーブル内のすべてのタグを取得します。
  • WebClientクラスを使用して、これらの<a>タグが指すURL(つまり、href属性の値)に移動し、HTMLをダウンロードします
  • ヒーローの各ページに存在し、ヒーローの画像を含むラッパー要素を見つける必要があります。次に、imagesrc属性にアクセスしてダウンロードできるようになります。あるいは、各画像に使用できる共通のIDがあるのではないでしょうか。

これらの手順を実行する正確なコードを誰かが提供することはないと思います。代わりに、あなたはあなた自身のいくつかの研究をする必要があります。

于 2012-07-21T16:21:11.420 に答える
1

はい、可能です。C# Web リクエストを実行し、C# HTML Agility Pack を使用して画像の URL を見つけます。

別の Web リクエストを使用して画像をダウンロードできます。

URL から画像をダウンロードする例:

public static Image LoadImage(string url)
{
    var backgroundUrl = url;
    var request = WebRequest.Create(backgroundUrl);
    var response = request.GetResponse();
    var stream = response.GetResponseStream();
    return Image.FromStream(stream);
}

HTML アジリティ パックを使用して他のデータを取得する例:

var request = (HttpWebRequest)WebRequest.Create(profileurl);
request.Method = "GET";
using (var response = request.GetResponse())
{
    using (var stream = response.GetResponseStream())
    {
        using (var reader = new StreamReader(stream, Encoding.UTF8))
        {
            result = reader.ReadToEnd();
        }
        var doc = new HtmlDocument();
        doc.Load(new StringReader(result));
        var root = doc.DocumentNode;
        HtmlNode profileHeader = root.SelectSingleNode("//*[@id='profile-header']");
        HtmlNode profileRight = root.SelectSingleNode("//*[@id='profile-right']");
        string rankHtml = profileHeader.SelectSingleNode("//*[@id='best-team-1']").OuterHtml.Trim();

        #region GetPlayerAvatar
        var avatarMatch = Regex.Match(profileHeader.SelectSingleNode("/html/body/div/div[2]/div/div/div/div/div/span").OuterHtml, @"(portraits[^(h3)]+).*no-repeat;", RegexOptions.IgnoreCase);
        if (avatarMatch.Success)
        {
            battleNetPlayerFromDB.PlayerAvatarCss = avatarMatch.Value;
        }
        #endregion
    }
}
于 2012-07-21T16:17:00.623 に答える