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

Ste*_*ers 97 c# favicon .net-4.0

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

有谁知道我会怎么做?

hun*_*ter 207

你想要通过以下几种方式解决这个问题:

  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" />

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


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

<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");
Run Code Online (Sandbox Code Playgroud)

希望有所帮助!

  • 如果有人想要谷歌的替代品,DuckDuckGo还有另一个解决方案:http://icons.duckduckgo.com/ip2/www.stackoverflow.com.ico (15认同)
  • 看起来谷歌现在有类似的服务:http://www.google.com/s2/favicons?domain_url = stapoverflow.com (12认同)
  • @Abedin.Zhuniqi 添加参数 `&amp;sz=:size` 其中 `:size` 是以 px 为单位的大小,例如 [`https://www.google.com/s2/favicons?sz=32&amp;domain_url=stackoverflow.com`] (https://www.google.com/s2/favicons?sz=32&amp;domain_url=stackoverflow.com) (7认同)
  • GetFavIcon 仍然有效吗?当我运行您的示例时,出现 400 错误 (2认同)
  • @JoseSerodio - 嗯......这是我尝试的第一件事,但是对于我正在检查的域,我只是得到了一个“暗淡/暗淡”的图像,该图像是一个正方形内的圆圈内的右向箭头(大于) 。[看起来像这样](https://icons.duckduckgo.com/ip2/.ico),但我检查以确保“domain.com.ico”拼写正确。现在,借助互联网的奇迹,它可以正常工作......想想=)所以,没关系。 (2认同)

Che*_*a_K 17

这个问题是我不断搜索网站 favicon API 时得到的第一个谷歌搜索结果。所以我认为这对未来还是有帮助的。

https://icon.horse/icon/[url.hostname]将为您提供更好的网站图标。

https://icon.horse/icon/stackoverflow.com


Blo*_*sie 10

这里有两个选项,我测试了超过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' />
Run Code Online (Sandbox Code Playgroud)

  • grabicon.com现在的付费服务从每月9美元起 (4认同)
  • 另一个:http://favicon.allesedv.com/ &lt;img width="144" height="144" src="//f3.allesedv.com/144/www.stackoverflow.com" /&gt; (2认同)

ram*_*son 9

您可以使用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 16x16 (4认同)

Ale*_*sco 7

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

curl -v https://icons.duckduckgo.com/ip2/<website>.ico > favicon.ico
Run Code Online (Sandbox Code Playgroud)

例子

curl -v https://icons.duckduckgo.com/ip2/www.cdc.gov.ico > favicon.ico
Run Code Online (Sandbox Code Playgroud)


Gan*_*ula 7

结合我自己的研究和下面的其他一些资源的答案。

根据您的要求,有几种方法可以实现。有些比其他更可靠

  1. 获取将图标嵌入其他位置的 url:

  2. 一起获取多个网站图标

  3. 其他替代方案


Mar*_*ell 6

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

<link rel="shortcut icon"
   href="http://sstatic.net/stackoverflow/img/favicon.ico">
Run Code Online (Sandbox Code Playgroud)

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

<link rel="apple-touch-icon"
   href="http://sstatic.net/stackoverflow/img/apple-touch-icon.png">
Run Code Online (Sandbox Code Playgroud)

所以你要在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;
Run Code Online (Sandbox Code Playgroud)

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


dor*_*hko 6

尽量减少每个页面所需的请求数量是一种很好的做法。因此,如果您需要多个图标,yandex 可以在一个查询中创建一个图标精灵。这是一个示例 http://favicon.yandex.net/favicon/google.com/stackoverflow.com/yandex.net/


OOO*_*M'' 5

您可以从网站的 HTML 中获取网站图标 URL。

这是favicon元素:

<link rel="icon" type="image/png" href="/someimage.png" />
Run Code Online (Sandbox Code Playgroud)

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


Mat*_*att 5

无需编程,只需3 步即可完成:

    1. 只需打开该网站,右键单击并选择“查看源代码”即可打开该网站的 HTML 代码。然后在文本编辑器中搜索“favicon” ——它会引导你找到类似的东西

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

    获取字符串href并将其附加到网站的基本 URL(假设它是"http://WEBSITE/"),因此它看起来像

    http://WEBSITE/SOMERELATIVEPATH/favicon.ico

    这是 favicon 的绝对路径。如果你没有通过这种方式找到它,它也可以在根目录中,在这种情况下,URL 是http://WEBSITE/favicon.ico.

    2. 将你确定的 URL 插入到以下代码的href -Parameter 中:
    <html>
      <head>
       <title>Capture Favicon</title>   
      </head>
      <body>
        <a href='http://WEBSITE/SOMERELATIVEPATH/favicon.ico' alt="Favicon"/>Favicon</a> 
      </body>
    </html>
    
    Run Code Online (Sandbox Code Playgroud)
    3. 将此 HTML 代码保存在本地(例如在您的桌面上)为GetFavicon.html,然后双击将其打开。它将只显示一个名为Favicon的链接。右键单击此链接并选择“目标另存为...”以将 Favicon 保存在本地 PC 上 - 大功告成!