【发布时间】:2011-08-02 04:50:23
【问题描述】:
我想实现一个类似于http://www.tineye.com/parse?url=yahoo.com 的功能 - 允许用户从任何网页上传图片。
对我来说主要问题是处理大量图片的网页需要太多时间。
我根据下一个方案在 Django 中执行此操作(使用 curl 或 urllib):
-
抓取页面的 html(大页面大约需要 1 秒):
file = urllib.urlopen(requested_url) html_string = file.read() 用 HTML 解析器 (BeautifulSoup) 解析它,寻找 img 标签,并将所有图像的 src 写入一个列表。 (大页面也需要大约 1 秒)
检查我列表中所有图像的大小,如果它们足够大,则在 json 响应中返回它们(大约需要 15 秒,当网页上有大约 80 个图像时)。下面是函数的代码:
def get_image_size(uri):
file = urllib.urlopen(uri)
p = ImageFile.Parser()
data = file.read(1024)
if not data:
return None
p.feed(data)
if p.image:
return p.image.size
file.close()
#not an image
return None
如您所见,我没有加载完整的图像来获得它的大小,只有 1kb。但是当有很多图像时仍然需要太多时间(我为找到的每张图像调用一次此函数)。
那么我怎样才能让它工作得更快呢?
可能有什么方法可以不对每张图片都提出请求吗?
我们将不胜感激。
谢谢!
【问题讨论】:
-
只检查 HTTP 响应中的内容长度怎么样?
-
是的,我想过,但我想只显示取决于宽度和高度的图像(例如超过 100 像素的宽度或高度),而且仅知道内容长度很难做到。