【问题标题】:How can I programmatically scrape an image from another website?如何以编程方式从另一个网站抓取图像?
【发布时间】:2010-03-05 01:54:46
【问题描述】:

几年前,我帮助某人整理了一个网页(仅供本地个人使用,不向全世界提供),该网页汇总了他最喜欢的几个网站的户外网络摄像头照片。一次查看多个网站可以节省时间。当这些网站上的图片有固定的 URL 时,我们就很轻松了。当 URL 发生可预测的变化时(例如,当 url 有一个日期时),我们能够编写一些 JavaScript 代码。但现在他想添加一个文件名看似随机变化的图像,我不知道如何处理。基本上,我想:

  1. 以编程方式访问另一个网站以查找特定图像的 URL。
  2. 使用<img> 标记将该网址插入我的网页。

我意识到这可能是一个令人困惑且不寻常的问题。我愿意尽可能帮助澄清。我只是不知道如何问这个家伙想做什么。

更新: David Dorward 提到使用 JavaScript 执行此操作违反了 Same Origin Policy。我愿意接受有关解决此问题的其他方法的建议。

【问题讨论】:

  • 你可以问他: 1. 图像路径是否改变(或者总是/images/something_random.jpg)? 2. 页面上要解析的图像位置是否发生了变化(或者它始终是 ID 为“content”的 div 中的第一个元素)?澄清这对开始会有很大帮助。您期望的随机变化越多,解决方案就越复杂。
  • 我认为图片路径是固定的。只有文件名会改变。而且我认为目标网页的结构是固定的,这是一个安全的假设。否则这将成为一个更难的问题。我认为当我查看它时,有问题的图像是某个主 div 标签之后的第一个标签。
  • 热链接不是个好主意!
  • 你唯一标记这个的编程语言是“JavaScript”,如果你在标准浏览器上下文中谈论 JS,那么你将在同源策略中运行 smack bang(使你想要实现不可能)。
  • @David Dorward,谢谢,我不知道。我用 html 和 JS 标记了这个,因为这就是那个家伙的网页当前使用的。我们当然可以寻求其他选择。

标签: javascript html image


【解决方案1】:
  1. 使用Cross Domain AJAX获取远程页面的html。
  2. 然后对其进行解析以获取感兴趣图像的 url。
  3. 然后for each url do <img src=url />

【讨论】:

  • 我猜这是因为问题是关于其他各种网页上的照片,而不是他可以控制的网页。
  • 这也将获取页面上的所有其他图像,这可能是很多图像 - 您的问题随后变为“在大量 URL 中,我如何找到我的有兴趣吗?'
  • :) 是的,明白了。回答换了朋友。试试看。再投两票,我会删除它。 :)
【解决方案2】:

这可能是对版权的严重侵犯。

图片最像容器在页面中 - 只是定期访问该页面并解析 img 标签。确保您评论的随机位不仅仅是一个随机参数,以强制浏览器获取新图像而不是检索缓存版本。

【讨论】:

  • 是的,这就是为什么我指出“仅供个人使用”,而不是向全世界提供。同时查看多个网页可以节省时间。
  • 如果将图像提供给全世界,即放置在可公开访问的网站上,则不构成侵犯版权。有足够的方法来拒绝访问。有些甚至被认为足够有效,绕过它们会违反 DMCA,但对于基本的版权声明,甚至不需要。
  • 在公开网站上并不意味着图像不受版权保护。 “版权”一词仅表示“复制权”,并且不会(也不应该期望)被公开可见的图像所取代。如果您为受版权保护但暂时在公共场所展示的绘画照片拍摄了照片,则您无权出售该照片的副本 - 这同样适用于网络。
【解决方案3】:

如果您在项目中使用 php,您可以使用 CURL 库来获取另一个网站内容并使用正则表达式解析它以从源代码中获取图像 url。

【讨论】:

  • 我不会使用正则表达式来解析 HTML。
  • 我们可以停止这种下意识的反应吗?我不会使用正则表达式来解析任何可能的任意 HTML,但你为什么不使用它来解析预期的 HTML 字符串呢?
  • 因为它是“预期的”,有时,我们的预期会让我们失望。
  • @belugabob 如果 HTML 不是“如预期”,那么无论您使用什么方法,都将无法提取 URL。这不是反对正则表达式的论据
【解决方案4】:

您的个人资料中有一个 Python 问题,所以我只想说,如果我想这样做,我会选择 Python 和Beautiful Soup。具有能够处理无效 HTML 的额外优势。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 2011-03-12
    相关资源
    最近更新 更多