我怎样才能获得网站的图标?

时间:2011-02-25 15:25:39

标签: c# .net-4.0 favicon

简单问题:我创建了一个小应用程序,它基本上只是我系统托盘中的收藏夹,以便我可以从同一个地方打开常用的站点/文件夹/文件。从我的系统获取已知文件类型的默认图标并不是非常复杂,但我不知道如何从网站获取favicon。 (例如,地址栏中有灰色 - >橙色堆栈图标)

有谁知道我会怎么做?

13 个答案:

答案 0 :(得分:186)

您希望通过以下几种方式解决这个问题:

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

    www.domain.com/favicon.ico

  2. 查找带有<link>属性

    rel="shortcut icon"代码

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

  3. 查找带有<link>属性

    rel="icon"代码

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

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


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

    <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");
    

    希望有所帮助!

答案 1 :(得分:11)

以下是两个选项,我测试了超过100个网址,每个选项都得到了不同的结果。 请注意,此解决方案不是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' />

答案 2 :(得分:8)

答案 3 :(得分:6)

要查找的第一件事是网站根目录中的/favicon.ico;像WebClient.DownloadFile()这样的东西应该没问题。但是,您也可以在元数据中设置图标 - 对于SO,这是:

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

并注意可能有替代图标; “触摸”倾向于更大更高的res,例如:

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

所以你要在HTML Agility Pack或XmlDocument(如果是xhtml)中解析它并使用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;

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

答案 4 :(得分:4)

最好尽量减少每个页面所需的请求数量。 因此,如果您需要多个图标,yandex可以在一个查询中执行精简版的精灵。 这是一个例子 http://favicon.yandex.net/favicon/google.com/stackoverflow.com/yandex.net/

答案 5 :(得分:3)

Yo可以从网站的HTML获取favicon网址。

这是favicon标签:

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

你应该在这里使用正则表达式。如果未找到任何标记,请在站点根目录中查找“favicon.ico”。如果找不到任何内容,该网站没有图标。

答案 6 :(得分:2)

        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");

答案 7 :(得分:2)

你可以无需编程。只需打开网站,右键单击并选择“查看源代码”即可打开该网站的HTML代码。然后在文本编辑器中搜索“favicon” - 它将引导您看起来像

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

href中的字符串并将其附加到网站的基本网址(我们假设它是"http://WEBSITE/"),所以它看起来像

  

http://WEBSITE/SOMERELATIVEPATH/favicon.ico

这是favicon的绝对路径。如果你没有这样找到它,它也可以在根中,在这种情况下,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 的链接。右键单击此链接并选择“将目标另存为...”以将Favicon保存在本地PC上 - 您就完成了!

答案 8 :(得分:1)

这是一个迟到的答案,但为了完整性:很难获得接近90%的所有收藏品。

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

一个。它首先查看favicon存储库,例如google favicons,getfavicons等......

湾如果他们都没有返回一个图标(我通过匹配他们返回的默认图标来检查)    我首先尝试自己获取图标

℃。这涉及遍历页面,但也检查没有autoredirect的重定向以及遍历404,因为在404上也可能存在一个图标。最后,这意味着你必须解析html标题中的重定向以及javascript重定向以接近100%

d。之后,我对物理图像文件进行了一些检查,因为有时在某些服务器上(我测试了300.000+)文件会返回不正确的mime类型等。

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

提取部分的核心在于:http://plugins.svn.wordpress.org/wp-favicons/trunk/includes/server/class-http.php所以你可以对它进行反向工程,但要注意确实应该验证响应(检查图像文件类型,mime等等。)

答案 9 :(得分:1)

我发现'SHGetFileInfo'(签名'www.pinvoke.net') 允许您检索小图标或大图标,就像处理文件/文件夹/ Shell项目一样。

Jens;)

答案 10 :(得分:0)

您可以使用Getfv.co

  

要检索图标,您可以将其热链接到... 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看起来已经死了。如果你想要我找到一个非免费的替代方案:grabicon.com

答案 11 :(得分:0)

使用jQuery

h1 {
 text-align:left;
 color:#595959;
 background: #80ff80;
 width:100%;
 height:60px;
 /* Specify a bottom border like this: */
 border-bottom: 1px solid grey;
}

答案 12 :(得分:0)

2020年,通过CLI使用duckduckgo.com的服务

curl -v https://icons.duckduckgo.com/ip2/<website>.ico > favicon.ico

示例

curl -v https://icons.duckduckgo.com/ip2/www.cdc.gov.ico > favicon.ico