0

我将尝试解释我的意思。我正在开发一个程序,我正在尝试从该站点自动下载一堆图像。

也就是说,我想从你点击英雄名字时得到的页面下载大方形图标,例如在Darius页面左上角的带有名字的图像DariusSquare.png并将其保存到文件夹中。

这是可能的还是我对 C# 的要求太多了?

非常感谢你!

4

2 回答 2

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 回答
1

一般来说,只要有足够的时间和金钱,一切皆有可能。在你的情况下,你需要很少的前者和后者:)

您需要做的事情可以在以下高级步骤中描述:

  • <a>使用英雄获取表中的所有标签。
  • 使用类导航到这些标签指向的WebClientURL (即属性值)并下载 HTML<a>href
  • 您将需要找到一些包装元素,该元素存在于每个带有 hero 的页面上,并且包含他的图像。然后,您应该能够访问图像src属性并下载它。或者,也许每个图像都有一个您可以使用的通用 ID?

我认为没有人会为您提供可以为您执行这些步骤的确切代码。相反,您需要自己进行一些研究。

于 2012-07-21T16:21:11.420 回答