0

.jpg の代わりに .txt ファイルを取得 -Webclientとを使用DownloadFile();

この URL から .jpg をダウンロードしようとしています。

http://1.bp.blogspot.com/_pK6J3MTn5co/S6kuH3aqbeI/AAAAAAAACUY/06axvmjU91k/s1600-h/avengers02_B&W_UL.jpg

このコードの使用:

private void TEST_button1_Click(object sender, EventArgs e)
{
    WebClient MyDownloader = new WebClient();
    MyDownloader.DownloadFile(@"http://1.bp.blogspot.com/_pK6J3MTn5co/S6kuH3aqbeI/AAAAAAAACUY/06axvmjU91k/s1600-h/avengers02_B&W_UL.jpg", @"c:\test.jpg");
}

ただし、これを実行すると、html マークアップを含むtest.jpgというファイルが作成されます... :

<html>
<head>
<title>avengers02_B&amp;W_UL.jpg (image)</title>
<script type="text/javascript">
<!--
if (top.location != self.location) top.location = self.location;
// -->
</script>
</head>
<body bgcolor="#ffffff" text="#000000">
<img src="http://1.bp.blogspot.com/_pK6J3MTn5co/S6kuH3aqbeI/AAAAAAAACUY/06axvmjU91k/s1600/avengers02_B%26W_UL.jpg" alt="[avengers02_B&amp;W_UL.jpg]" border=0>
</body>
</html>

実際の .jpg をダウンロードするにはどうすればよいですか?

どんな助けでも大歓迎です - ありがとう!

4

3 に答える 3

2

サーバーが特定の URL でリクエストに HTML を返す場合、その URL で何か他のものを返すよう強制することはできません。

できることは、HtmlAgilityPack で応答を解析し、実際の画像への URL を見つけて別の要求で取得することです。

于 2012-07-03T00:53:35.463 に答える
1

それを行う方法があります。まず、HTML コンテンツを文字列にダウンロードし、正しい画像 URL を抽出します。次に、正しい URL を使用してファイルをダウンロードします。

 WebClient client = new WebClient();
 var path = @"http://1.bp.blogspot.com/_pK6J3MTn5co/S6kuH3aqbeI/AAAAAAAACUY/06axvmjU91k/s1600-h/avengers02_B&W_UL.jpg";

 var content = client.DownloadString(path);
 System.Text.RegularExpressions.Regex regex = new Regex(@"(?<=<img\s+[^>]*?src=(?<q>['""]))(?<url>.+?)(?=\k<q>)");
 var match = regex.Match(content);
 if (match.Success)
 {
     client.DownloadFile(match.Value, @"e:\test1.jpg");
 } 
于 2012-07-03T01:14:00.710 に答える
0

そのリンクをクリックすると、2つのダウンロードが発生します。最初はHTMLのページ(接尾辞が誤ってラベル付けされています.jpg)、次にHTMLの画像です。

imgでは、前のリクエストで取得したHTMLのタグのURLを取得する必要があるのではないでしょうか。

http://1.bp.blogspot.com/_pK6J3MTn5co/S6kuH3aqbeI/AAAAAAAACUY/06axvmjU91k/s1600/avengers02_B%26W_UL.jpg

元のURLから削除する-hと、実際のファイルが表示される可能性があると思います。

これらのファイルをスクレイプする権限があることを願っています...

于 2012-07-03T01:01:41.643 に答える