如何测试网页是否是图像

时间:2015-03-14 09:18:58

标签: python list python-3.x urllib

很抱歉标题不是很清楚,基本上我有一个包含一系列网址的列表,打算下载那些图片。无论如何要检查网页是否是图像,以便我可以跳过那些不是的图像?

提前致谢

3 个答案:

答案 0 :(得分:4)

没有可靠的方法。但是你可以找到一个在你的情况下可能“足够好”的解决方案。

您可以查看文件扩展名是否存在于网址中,例如,.png.jpg可能表示图片:

>>> import os
>>> name = url2filename('http://example.com/a.png?q=1')
>>> os.path.splitext(name)[1]
'.png'
>>> import mimetypes
>>> mimetypes.guess_type(name)[0]
'image/png'

其中url2filename() function is defined here

您可以检查Content-Type http标头:

>>> import urllib.request
>>> r = urllib.request.urlopen(url) # make HTTP GET request, read headers
>>> r.headers.get_content_type()
'image/png'
>>> r.headers.get_content_maintype()
'image'
>>> r.headers.get_content_subtype()
'png'

您可以检查http正文的最开头是否有指示图像文件的幻数,例如jpeg may start with b'\xff\xd8\xff\xe0'或:

>>> prefix = r.read(8)
>>> prefix # .png image
b'\x89PNG\r\n\x1a\n'

As @pafcu suggested in the answer to the related question,您可以使用imghdr.what() function

>>> import imghdr
>>> imghdr.what(None, b'\x89PNG\r\n\x1a\n')
'png'

答案 1 :(得分:4)

您可以使用requests模块。提出头请求并检查内容类型。头部请求不会下载响应正文。

import requests
response = requests.head(url)
print response.headers.get('content-type')

答案 2 :(得分:1)

您可以使用mimetypes https://docs.python.org/3.0/library/mimetypes.html

import urllib
from mimetypes import guess_extension

url="http://example.com/image.png"
source = urllib.urlopen(url)
extension = guess_extension(source.info()['Content-Type'])
print extension

这将返回“png”