私はウェブサイトを作っています。私は、サーバーから、ユーザーが送信したリンクが実際に存在するイメージかどうかをチェックしたいと思います。イメージへのURLがアップしていて、Pythonに存在するかどうか確認してください。
3
A
答えて
10
これは迅速である一つの方法です:
それは本当にそれだけのファイル拡張子に基づいて、その後、URLが存在することを確認推測、それが実際に画像ファイルであるかどうかを検証しません。実際にURLから返されたデータが実際にイメージ(セキュリティ上の理由から)であることを確認する必要がある場合は、この解決法は機能しません。
import mimetypes, urllib2
def is_url_image(url):
mimetype,encoding = mimetypes.guess_type(url)
return (mimetype and mimetype.startswith('image'))
def check_url(url):
"""Returns True if the url returns a response code between 200-300,
otherwise return False.
"""
try:
headers={
"Range": "bytes=0-10",
"User-Agent": "MyTestAgent",
"Accept":"*/*"
}
req = urllib2.Request(url, headers=headers)
response = urllib2.urlopen(req)
return response.code in range(200, 209)
except Exception, ex:
return False
def is_image_and_ready(url):
return is_url_image(url) and check_url(url)
1
ここimghdr
に見てみましょういくつかのサンプルコードです:
import imghdr
import httplib
import cStringIO
conn = httplib.HTTPConnection('www.ovguide.com', timeout=60)
path = '/img/global/ovg_logo.png'
conn.request('GET', path)
r1 = conn.getresponse()
image_file_obj = cStringIO.StringIO(r1.read())
what_type = imghdr.what(image_file_obj)
print what_type
これは 'PNG' を返す必要があります。それがイメージされていない場合、それは助けなし
希望を返さないでしょう!
-Blake
+0
を解決し、これは移動するための方法であるが、それは最初に全体のイメージファイルを取得する費用で来ます – MattoTodd
0
あなたは、httpリクエストのヘッダーを読み取ることができ、それは、コンテンツ型のようないくつかのメタデータが含まれています。 python 3オン
:
from urllib.request import urlopen
image_formats = ("image/png", "image/jpeg", "image/gif")
url = "http://localhost/img.png"
site = urlopen(url)
meta = site.info() # get header of the http request
if meta["content-type"] in image_formats: # check if the content-type is a image
print("it is an image")
また、この程度の良いニュースは、それが画像をダウンロードしないことです画像のサイズやなどのような他の情報を取得することができます。ヘッダーに画像であると表示されていない場合は失敗する可能性がありますが、最後のチェックを行い、最初のフィルターを通過すると画像をダウンロードできます。
0
これは、以前のコメントにも基づいて、自分のアプリケーションのために働いて最善のアプローチです:
def is_url_image(image_url):
image_formats = ("image/png", "image/jpeg", "image/jpg")
r = requests.head(image_url)
if r.headers["content-type"] in image_formats:
return True
return False
関連する問題
- 1. サービスワーカーキャッシュにURLが存在するかどうか確認してください。
- 2. リダイレクトURLが存在するか確認してください。
- 3. Python:リストの要素がファイルに存在していないかどうかを確認してください。
- 4. ファイルがtypescriptに存在するかどうか確認してください
- 5. キューがSolaceに存在するかどうか確認してください
- 6. 値がRDDに存在するかどうか確認してください
- 7. Pythonリストに挿入します。まだエントリが存在するかどうか確認してください。
- 8. Pythonドライバを使用してCassandraテーブルにレコードが存在するかどうか確認してください
- 9. ノードが存在するかどうかを確認してください。
- 10. ウェブサイトが存在するかどうかを確認してください
- 11. PouchDBローカルデータベースが存在するかどうかを確認してください
- 12. ファイルタイプが存在するかどうか確認してください
- 13. リーフレットレイヤー、feature.propertiesが存在するかどうか確認してください
- 14. IndexedDBデータベースが存在するかどうか確認してください
- 15. コマンドが存在するかどうか確認してください。
- 16. Hadoopクラスタが存在するかどうか確認してください
- 17. SPARQLリソースが存在するかどうかを確認してください
- 18. Vue.js:コンポーネントが存在するかどうかを確認してください
- 19. netscalerクッキーが存在するかどうかを確認してください
- 20. 入力ブロブが存在するかどうか確認してください
- 21. C#Mysqlエラートークンが存在するかどうか確認してください。
- 22. Express、テンプレートが存在するかどうか確認してください
- 23. ノード - ディレクトリが存在するかどうかを確認してください
- 24. facebook-mailが存在するかどうかを確認してください。
- 25. Appceleratorロケールデータベースが存在するかどうか確認してください
- 26. キューが存在するか確認してください。
- 27. SSRSパラメータが存在するか確認してください
- 28. ファイルがPythonのHDFSに存在するか確認してください
- 29. gitにコードが存在していないか確認してください。
- 30. Django:特定のURLに画像が存在するかどうか確認してください
HEADリクエストは、おそらくあまりにも、行うことができます。 – 9000
ヘッドリクエストが何であるとしても、 'HEAD'リクエストに応答するよりも' Range'ヘッダをサポートするサイト/サーバが増えています。 – MattoTodd
好奇心。範囲 '0-10'は任意ですか?たとえば、「0-0」をリクエストできますか?そうすることが有効であると思われます:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.1 – zigg