简单问题:我创建了一个小应用程序,它基本上只是我系统托盘中的收藏夹,以便我可以从同一个地方打开常用的站点/文件夹/文件。从我的系统获取已知文件类型的默认图标并不是非常复杂,但我不知道如何从网站获取favicon。 (例如,地址栏中有灰色 - >橙色堆栈图标)
有谁知道我会怎么做?
答案 0 :(得分:186)
您希望通过以下几种方式解决这个问题:
在域的根目录中查找favicon.ico
www.domain.com/favicon.ico
查找带有<link>
属性
rel="shortcut icon"
代码
<link rel="shortcut icon" href="/favicon.ico" />
查找带有<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");
希望有所帮助!
答案 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)
您可以使用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/
答案 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