如何从网站上刮取徽标?

时间:2011-04-09 20:08:56

标签: screen-scraping html-parsing

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

这是一个关于最好的解决方案的首要问题,这个解决方案是从网站地址开始,只搜索网站的徽标

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

  1. 使用Google AJAX API通过查询“logo”进行范围限定为相关网站的图片搜索,并获取第一个结果。我会说,大约有30%的时间会出现这个标识。
  2. 上面的问题是Google似乎并不关心CSS图像替换徽标(即用图标替换徽标的H1文本)。我暂时提出的解决方案是下拉所有CSS文件,扫描url()声明,然后在文件名中查找单词标题或徽标。
  3. 解决方案二是有问题的,因为所有为网站编写CSS的人都有很多特质。他们在文件名中使用Header而不是徽标。有时文件名是随机的,对徽标一无所知。其他时候,这只是错误的形象。

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

    所有这一切,如果有人有任何“开箱即用”思考这个,我很乐意听到它。如果我能创建一个运行良好的解决方案,我计划为任何其他感兴趣的团体开源图书馆:)

    谢谢!

5 个答案:

答案 0 :(得分:4)

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

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

所以我建议不要用完全技术性的解决方案来解决这个问题 - 外包手工劳动。

答案 1 :(得分:2)

创建应用程序将明确地帮助您,但我相信最终会涉及一些手动工作。这就是我要做的事。

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

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

答案 2 :(得分:1)

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

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

您可以查找项目以获取网络上的html叶节点,或使用正则表达式获取所有html标记。

答案 3 :(得分:1)

通过Clearbit检查此API。它使用起来非常简单:

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

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

并取回徽标图片!

有关它的更多信息here

答案 4 :(得分:0)

我使用C#console app和HtmlAgilityPack nuget包从600多个站点中删除徽标。 算法是你获得url中有“logo”的所有图像。 在此类提取过程中您将面临的挑战是:

  • 相对图片
  • 基本网址是CDN HTTP / HTTPS(如果您不知道 在提出请求之前的协议)
  • 图片有?或者&amp;查询 最后的字符串

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