【问题标题】:PHP scrape remote images that do not have extensionsPHP 抓取没有扩展的远程图像
【发布时间】:2012-08-01 19:47:29
【问题描述】:

我开发了一个图像抓取工具,它可以从远程站点抓取特定图像,并在粘贴到文本字段时显示它们。该逻辑包括查找以 .jpg .jpeg 结尾的图像。 png 等。

我遇到了一个问题,很多网站将通过 javascript 生成图像,或者没有将图像扩展名作为显示图像的一部分。像

这样的示例网站

www.express.com 和 www.underarmour.com 有这个问题等等。

我可以使用什么功能从设置的 URL 中查找图像,然后相应地显示它们没有文件扩展名?

再次感谢。

【问题讨论】:

  • AFAIK 如果你没有文件扩展名,你不能只是“猜测”并附加一个扩展名。
  • 如果您没有来自这些站点的权限,则无法执行此操作。两个命名网站的服务条款都非常明确。
  • 寻找img标签而不是扩展名
  • 我对你的确切问题一无所知。在 HTTP 中,文件名无关紧要,因为我们有 Content-Type 标头。我认为实际上没有人使用客户端 JavaScript 生成图像 :-?

标签: php javascript jquery image scraper


【解决方案1】:

除非 url 来自 <img src="...">,否则无法判断您将从特定 url 得到什么。 http://example.com/index.html 实际上很可能是一个提供 zip 文件的 PHP 脚本。

在您真正点击该 url 并检查标题 + 下载数据之前,不可能可靠地告诉您一个 url 会给您什么。

【讨论】:

  • 基本上将脚本视为 facebook 共享功能的方式。它获取链接并从站点生成图像的缩略图预览。所以脚本本身会搜索网站的 HTML。
  • 很可能 FB 只是从 img 标签中提取 url,而不是在它指向图片的情况下跟踪页面上的每个不稳定的 url。
【解决方案2】:

我认为,你有两个选择:

  1. 生成一些启发式方法,判断 URL 是否可以是图像(例如在 URL 中查找 /images/ 部分)

  2. 加载每个 URL 并检查返回的数据是否为图像(例如使用getimagesize()

第二个版本更通用,但在带宽和资源方面都相当繁重。

【讨论】:

  • getimagesize 在执行其操作之前会下载整个 url。如果您实际上将其指向一个原来是 200 大 .gif 图标的东西,这没什么大不了的。如果那个奇怪的链接原来是一个 4GB 的 iso 图像,那就太丑了。
  • 我同意,我现在正在获取图像大小,但它仅适用于具有文件扩展名的图像。最大的问题是其中一些网站正在通过 javascript 打印图像。
  • @Marc B:没错。但您也可以预加载数据并在本地数据上调用getimagesize()。例如,您可以使用 cURL 来获取响应的标头(HEAD 请求),确定它是否是图像(并查看文件大小,它也应该在标头中)然后加载它。但是a)这些标头可能是错误的,b)如果你这样做,你会发出大量的请求。
  • @Chris Favaloro:“通过 javascript 打印”= 在 DOM 中动态加载它,或者在<canvas>、SVG 等中使用 JavaScript 实际打印图像?
猜你喜欢
  • 2012-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-18
  • 2012-02-13
  • 1970-01-01
相关资源
最近更新 更多