我怎样才能得到一个网站的图标?

足够简单的问题:我已经创build了一个小应用程序,基本上只是我的系统托盘中的一个collections夹,以便我可以从同一个地方打开经常使用的网站/文件夹/文件。 从我的系统获取已知文件types的默认图标不是非常复杂,但我不知道如何从网站获取图标。 (例如在地址栏中有灰色 – >橙色的堆叠图标)

有谁知道我可能会怎么做呢?

你会想要解决这个几个方面:

  1. 在域的根目录下查找favicon.ico

    www.domain.com/favicon.ico

  2. 使用rel="shortcut icon"属性查找<link>标记

    <link rel="shortcut icon" href="/favicon.ico" />

  3. 使用rel="icon"属性查找<link>标签

    <link rel="icon" href="/favicon.png" />

后两者通常会产生更高质量的图像。


只是为了覆盖所有的基础,有设备特定的图标文件,可能会产生更高质量的图像,因为这些设备通常在设备上比浏览器需要更大的图标:

<link rel="apple-touch-icon" href="images/touch.png" />

<link rel="apple-touch-icon-precomposed" href="images/touch.png" />


要下载图标而不关心图标是什么,您可以使用像http://www.google.com/s2/favicons这样的工具来完成所有繁重的工作:;

 var client = new System.Net.WebClient(); client.DownloadFile( @"http://www.google.com/s2/favicons?domain=stackoverflow.com", "stackoverflow.com.ico"); 

希望有所帮助!

这里有2个选项,我testing了100多个url,并得到不同的结果,每个选项。 请注意,这个解决scheme不是c#,但c#可能不是必需的。

 <img height="16" width="16" src='http://grabicon.com/edocuments.co.uk' /> <img height="16" width="16" src='http://www.google.com/s2/favicons?domain=www.edocuments.co.uk' /> 

您可以使用Google S2 Converter。

http://www.google.com/s2/favicons?domain=google.com

资料来源: http : //www.labnol.org/internet/get-favicon-image-of-websites-with-google/4404/

首先要查找的是站点根目录中的/favicon.ico; 像WebClient.DownloadFile()应该做的很好。 但是,您也可以在元数据中设置图标 – 对于这是:

 <link rel="shortcut icon" href="http://sstatic.net/stackoverflow/img/favicon.ico"> 

并注意可能有替代的图标; 例如:“摸”一个往往是更大和更高的水库,

 <link rel="apple-touch-icon" href="http://sstatic.net/stackoverflow/img/apple-touch-icon.png"> 

所以你可以在HTML Agility Pack或XmlDocument(如果是xhtml)中parsing,并使用WebClient.DownloadFile()

以下是我通过敏捷包获取的一些代码:

 var favicon = "/favicon.ico"; var el=root.SelectSingleNode("/html/head/link[@rel='shortcut icon' and @href]"); if (el != null) favicon = el.Attributes["href"].Value; 

请注意,图标是他们的,而不是你的。

哟可以从网站的HTML获取图标url。

这里是favicon标签:

 <link rel="icon" type="image/png" href="/someimage.png" /> 

你应该在这里使用一个正则expression式。 如果找不到标签,请在站点根目录下查找“favicon.ico”。 如果没有发现,该网站没有favicon。

最小化每个页面所需的请求数量是一个很好的做法。 所以如果你需要几个图标,yandex可以在一个查询中做一个小图标的精灵。 这里是一个例子http://favicon.yandex.net/favicon/google.com/stackoverflow.com/yandex.net/

  HttpWebRequest w = (HttpWebRequest)HttpWebRequest.Create("http://stackoverflow.com/favicon.ico"); w.AllowAutoRedirect = true; HttpWebResponse r = (HttpWebResponse)w.GetResponse(); System.Drawing.Image ico; using (Stream s = r.GetResponseStream()) { ico = System.Drawing.Image.FromStream(s); } ico.Save("favicon.ico"); 

你可以不用编程 。 只要打开网站,右键点击并select“查看源代码”打开该网站的HTML代码。 然后在文本编辑器中search“favicon” – 它会引导你看起来像

 <link rel="icon" href='/SOMERELATIVEPATH/favicon.ico' type="image/x-icon" /> 

href取出string并将其附加到网站的基本URL(让我们假设它是"http://WEBSITE/" ),所以它看起来像

http://WEBSITE/SOMERELATIVEPATH/favicon.ico

这是favicon的绝对path。 如果您没有这样find它,那么在这种情况下URL也可以是http://WEBSITE/favicon.ico

取出您确定的URL并将其插入到以下代码中:

 <html> <head> <title>Capture Favicon</title> </head> <body> <a href='http://WEBSITE/SOMERELATIVEPATH/favicon.ico' alt="Favicon"/>Favicon</a> </body> </html> 

将此HTML代码保存在本地(例如桌面上)作为GetFavicon.html ,然后双击打开它。 它将只显示一个名为Favicon的链接。 右键点击这个链接,然后select“Save target as …”将Favicon保存到本地PC上,就完成了!

这是一个迟到的答案,但为了完整:即使接近90%的提取所有图标也是相当困难的。

前一段时间,我写了一个WordPress插件: http : //wordpress.org/extend/plugins/wp-favicons/ ,它试图靠近。

一个。 它开始通过看favicon存储库,如谷歌favicons,getfavicons等…

湾 如果他们没有一个返回一个图标(我通过与他们返回的默认图标匹配来检查这一点)我开始尝试自己的图标

C。 这涉及遍历页面,但也检查redirectNO NO autoredirect以及遍历404的,因为也可以在404的图标存在。 最后,这意味着你将不得不parsingredirect在HTML头以及JavaScriptredirect接近100%

d。 之后,我做了一些物理图像文件的检查,因为有时也在某些服务器(我testing300.000 +)文件返回不正确的MIMEtypes等。

代码仍然不完美,因为在细节上它变得疯狂,你会发现很多奇怪的情况:人们错误地编码path(img / favicon.ico,其中img不在根目录中),在html输出中重复标题,不同的服务器响应从头部和身体等…

获取部分的核心在这里: http : //plugins.svn.wordpress.org/wp-favicons/trunk/includes/server/class-http.php所以你可以逆向工程,但要知道validation响应应该真的要做(检查图像文件types,MIME等..)

我发现'SHGetFileInfo'(签名为'www.pinvoke.net')可以让你检索一个小或大的图标,就像处理文件/文件夹/shell项目一样。

延斯;)

http://realfavicongenerator.net/favicon_checker?site=http://stackoverflow.com给你favicon分析,说明哪些图标是什么大小的目前。; 您可以处理页面信息,看看哪个是最好的质量图标,并将其附加到URL来获取它。

您可以使用Getfv.co :

要检索一个favicon你可以把它链接到http://g.etfv.co/ [ URL ]

本页的示例: http : //g.etfv.co/https : //stackoverflow.com/questions/5119041/how-can-i-get-a-web-sites-favicon

下载内容,我们走吧!

编辑:

Getfv.co和fvicon.com看起来死了。 如果你想我find一个非自由的select: grabicon.com 。