私は正確に何を意味するのかを説明しようとします。私はプログラムに取り組んでおり、このサイトから大量の画像を自動的にダウンロードしようとしています。
つまり、ヒーロー名をクリックすると表示されるページから大きな四角形のアイコンをダウンロードしたいと考えDariusSquare.png
ています。
これは可能ですか、それとも C# に求めすぎですか?
どうもありがとうございました!
一般的に、十分な時間とお金があれば、すべてが可能です。あなたの場合、前者はほとんど必要なく、後者は必要ありません:)
あなたがする必要があることは、次の高レベルのステップで説明することができます:
<a>
ヒーローと一緒にテーブル内のすべてのタグを取得します。WebClient
クラスを使用して、これらの<a>
タグが指すURL(つまり、href
属性の値)に移動し、HTMLをダウンロードしますsrc
属性にアクセスしてダウンロードできるようになります。あるいは、各画像に使用できる共通のIDがあるのではないでしょうか。これらの手順を実行する正確なコードを誰かが提供することはないと思います。代わりに、あなたはあなた自身のいくつかの研究をする必要があります。
はい、可能です。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
}
}