【问题标题】:How to scrape logos from websites?如何从网站上抓取徽标?
【发布时间】:2011-08-02 05:29:39
【问题描述】:

首先,这不是关于如何抓取网站的问题。我完全了解可用于抓取的工具(css_parser、nokogiri 等。我正在使用 Ruby 进行抓取)。

这更像是一个关于从网站地址开始抓取网站徽标的最佳解决方案的总体问题。

我已经开始创建的两个解决方案是:

  1. 使用 Google AJAX API 进行图像搜索,搜索范围为相关站点,查询“logo”,并获取第一个结果。我会说,大约 30% 的时间会得到徽标。
  2. 上述问题在于,Google 似乎并不真正关心 CSS 图像替换徽标(即,图像替换为徽标的 H1 文本)。我暂时想出的解决方案是拉下所有 CSS 文件,扫描 url() 声明,然后在文件名中查找单词 header 或 logo。

解决方案二是有问题的,因为所有为网站编写 CSS 的人都有许多特质。他们在文件名中使用 Header 而不是 logo。有时文件名是随机的,没有说明徽标。其他时候,它只是错误的图像。

我意识到我可能能够通过某种机器学习来做某事,但我的客户有点截止日期,并且很快需要一些相当有能力的东西。

综上所述,如果有人对此有任何“开箱即用”的想法,我很想听听。如果我能创建一个运行良好的解决方案,我计划为任何其他感兴趣的方开源该库:)

谢谢!

【问题讨论】:

  • 另外,我想补充一点,我这样做是为了减少我客户的手动图像上传过程。我们将提取数千条记录,我希望他们能够尽可能少地手动上传。谢谢!
  • 如何做一些事情,比如将您建议的搜索之一与以下内容结合起来:谷歌搜索仅限于根 url,以识别网站上的多个页面。扫描两页或三页图像,找到所有搜索页共有的图像。如果所有页面都有多个结果,您需要制定某种选择标准,可能是尺寸,可能是页面内的顺序......但我认为这将是一些反复试验才能看到什么有效最好的。然后你可以比较这两种方法的结果,如果他们同意,也许是徽标...
  • 这似乎是一个很好的解决方案!我对 SO 很陌生(虽然是长期潜伏者),但为什么不将其发布为答案呢?
  • 这个问题和Ruby无关
  • 已修改。感谢您直率但真实的评论。

标签: screen-scraping html-parsing


【解决方案1】:

通过 Clearbit 检查此 API。使用起来超级简单:

只需发送查询到: https://logo.clearbit.com/[enter-domain-here]

例如: https://logo.clearbit.com/www.stackoverflow.com

并取回徽标图像!

更多信息here

【讨论】:

    【解决方案2】:

    解决这个问题的另一种简单方法是获取所有叶节点并获取第一个

    <a><img src="http://example.com/a/file.png" /></a>
    

    你可以在网上查找项目获取html叶子节点或使用正则表达式获取所有html标签。

    【讨论】:

    • 我认为这是一个很好的答案,适用于大多数网站。
    【解决方案3】:

    我使用带有 HtmlAgilityPack nuget 包的 C# 控制台应用程序从 600 多个网站上抓取徽标。 算法是你得到所有在 url 中有“logo”的图像。 在提取过程中您将面临的挑战是:

    • 相对图像
    • 基本 url 是 CDN HTTP/HTTPS(如果你不知道 提出请求之前的协议)
    • 图像有 ?或 & 带查询 结尾的字符串

    考虑到这一点,我获得了大约 70% 的成功,但有些图片不是实际的徽标。

    【讨论】:

      【解决方案4】:

      我必须为之前的项目找到大约 10K 个网站的徽标,并尝试了您提到的提取 URL 中带有“徽标”的图像的相同技术。我的变化是我在 webkit 中加载每个网页,以便所有图像都从 CSS 或 JavaScript 加载。这种技术为我提供了大约 40% 的网站的徽标。

      然后我考虑创建一个像 Nick 建议的应用程序来手动选择其余网站的徽标,但是我意识到将这些提供给便宜的人(我通过 Elance 找到)来完成这项工作更具成本效益手动。

      所以我建议不要费心用一个完整的技术解决方案来妥善解决这个问题 - 外包体力劳动。

      【讨论】:

        【解决方案5】:

        创建应用程序肯定会对您有所帮助,但我相信最终会涉及到一些手动工作。这就是我要做的。

        • 让您的应用程序在数据库中存储指向网站上所有大于指定尺寸的图像的链接,以便您可以清除小图标。
        • 然后您可以设置一个表单来访问这些结果。您可能需要设置数据库表来存储网站 url 以及 url 和图像链接之间的关系。

        即使我们可以编写一个应用程序来真正确定它是否是一个徽标,这似乎也需要大量的代码。最后,它可能会比上述更多地淘汰,但你必须考虑到人类视觉解析结果可能比你编写和测试复杂代码所花费的时间更快。

        【讨论】:

        • 哦。太好了,但我建议不要下载和存储每张图片(我们至少在谈论 10,000 个网站,而且每个网站都必然有大量图片),而是保存所有这些图片和 ajax 的 url它们进入管理表单...相同的概念,只是存储在我们的服务器上的方式更少。
        • 这也请求外包给 Mechanical Turk :D 谢谢!
        • @Keith Hanson,既然您在谈论大量的网站,为什么不创建一个数据库来存储找到的图像的链接。每个链接都可以属于数据库中网站的 url。然后,您可以打开 bestbuy.com 的详细信息,其中会列出该页面上该特定网站的链接或图片。
        • @Nick 这正是我的想法。对您的原始答案进行小修改(不要从字面上下载图像,只需存储地址)。
        • @Keith Hanson,我修改了答案。
        猜你喜欢
        • 1970-01-01
        • 2016-09-08
        • 2021-06-22
        • 1970-01-01
        • 1970-01-01
        • 2020-01-26
        • 2018-09-01
        相关资源
        最近更新 更多