【问题标题】:How do sites like Bing Search, Imgur, and Reddit generate a thumbnail of the website from a URL?Bing Search、Imgur 和 Reddit 等网站如何从 URL 生成网站的缩略图?
【发布时间】:2013-09-18 23:06:57
【问题描述】:

在 Imgur 中,您可以输入图像 URL,几秒钟后,就会出现图像的缩略图。或者在必应搜索中,您可以(或曾经)能够在访问之前在搜索结果中查看网站的缩略图。

我很想为我的网站实现类似的东西,但我无法完全理解它是如何完成的。此外,没有安全问题吗?我想服务器至少必须下载网站,渲染它并截取屏幕截图。如果是恶意网站,而您在服务器上下载了恶意内容怎么办?

【问题讨论】:

  • 我通过谷歌搜索“网站截图 api”找到了这个:url2png.com
  • 它认为它已经在stackoverflow.com/questions/757675/…得到回答
  • Reddit 只是从链接页面中挑选 [看似随机的] 图像,然后调整大小并裁剪它。 Imgur 有图像,所以它只是调整大小。 Bing/Google 提供页面本身的渲染屏幕非常复杂,您最好的选择可能是 @gerrytan 链接的 API。
  • @gerrytan,感谢您的链接,但我想将此作为我自己的服务来实现,以尽可能减少调用外部 API 的延迟(这是了解更多信息的机会!)。
  • 你基本上必须实现一个 DOM 渲染引擎 [like Gecko] 并且可能还需要一个 javascript 引擎才能正确渲染现代网站。更不用说嵌入闪存时会发生什么。

标签: php c++ image security web-crawler


【解决方案1】:

可以使用像 PhantomJS 这样的无头 Web 浏览器引擎。请参阅their wiki 上的示例。是的,谨慎的做法是在某种沙箱中运行它,将 URL 队列输入其中,然后从文件系统中获取生成的缩略图。

【讨论】:

    【解决方案2】:

    虽然我不知道上述任何服务的内部工作原理,但我猜他们会下载/创建图像的本地副本并从中生成缩略图。

    Imgur 作为图像托管服务,在能够从中生成缩略图或其他任何内容之前,肯定需要图像的副本。图像可以存储在本地或仅存储在内存中,但无论哪种方式,都必须下载。

    显示网站屏幕截图的搜索引擎可能具有在内容被编入索引时定期截取可视区域屏幕截图的服务,然后将这些屏幕截图(或衍生版本)与搜索结果一起提供。截屏确实不危险,所以没有什么可担心的,任何用于加载/解析/索引网站的工具显然都会考虑到安全性。

    当然,您下载的数据也存在安全问题;图像很容易在其 EXIF 数据中包含可执行代码(例如 PHP),因此您需要注意如何处理图像以及如何处理。

    【讨论】:

      猜你喜欢
      • 2018-05-19
      • 1970-01-01
      • 2015-12-13
      • 2011-06-28
      • 2017-05-01
      • 2011-06-02
      • 2011-12-06
      • 1970-01-01
      • 2014-06-18
      相关资源
      最近更新 更多