0

保存できるようにスクレイピングできない画像に出くわすことがあります。これの例は次のとおりです。

https://s3.amazonaws.com/plumdistrict.com-production/perks/12321/image/original.?1325898487

Internet Explorer から URL にアクセスすると画像が表示されますが、以下のコードから取得しようとすると、「System.Net.WebException The remote server returned an error: (403) Forbidden」というエラー メッセージが表示されます。 :

string url = "https://s3.amazonaws.com/plumdistrict.com-production/perks/12321/image/original.?1325898487";
WebRequest request = WebRequest.Create(url);
WebResponse response = request.GetResponse();

この画像を取得する方法についてのアイデアはありますか?

編集:

拡張子を持つ画像を保存することができます。たとえば、次の画像を問題なくスクレイピングできます。

https://s3.amazonaws.com/plumdistrict.com-production/perks/12659/image/original.jpg?1326828951

4

2 に答える 2

1

HTTP は本来ステートレスであると想定されていますが、ステートレスであることに依存する多くの実装があります。ログインしていることを証明する Cookie を提供する場合、「http://mydomain.com/sexy_avatar.jpg」へのリクエストのみを受け入れるように Web サーバーを構成できます。そうでない場合は、「http://mydomain」へのリダイレクト 303 を送信します。 .com/avatar_for_public_use.jpg".

アマゾンも同じことをしているかもしれません。Chrome を使用して Web ページをロードし、開発者モード (CTRL+SHIFT+J) でネットワーク ビューを見て、Web サイトに提供されているすべてのヘッダーを確認します。画像を表示する前に、同じセッションで完全なナビゲーションを行う必要さえあるかもしれません。これは、私が開発した多くの Web アプリケーションに当てはまります :-)

于 2012-01-18T09:34:16.503 に答える
0

スクリプトから生成されているようです (データベースから取得されている可能性があります)。サーバーはそれに合わせてファイル/コンテンツタイプを送信する必要があります...しかし、そうではないようです。これは標準に違反していると思います。

私の Linux ボックスは、拡張子に依存するのではなくファイル ヘッダーを調べるため、ハード ドライブに保存されると、それが JPEG 画像であることを十分に認識しています。おそらく、Windowsで同じことを行うツールがありますか?

編集: 実際、さらによく考えてみると、そのために403が返されるのは奇妙に思えます。おそらく、サーバーは実際にその方法でファイルを取得することをブロックしています.

于 2012-01-18T09:21:20.000 に答える