问题很简单:我已经创建了一个小应用程序,它基本上只是位于系统托盘中的收藏夹,因此我可以从同一位置打开常用的网站/文件夹/文件。从我的系统中获取已知文件类型的默认图标并不十分复杂,但是我不知道如何从网站获取该图标。(例如,SO在地址栏中具有灰色->橙色堆栈图标)
有人知道我该怎么做吗?
问题很简单:我已经创建了一个小应用程序,它基本上只是位于系统托盘中的收藏夹,因此我可以从同一位置打开常用的网站/文件夹/文件。从我的系统中获取已知文件类型的默认图标并不十分复杂,但是我不知道如何从网站获取该图标。(例如,SO在地址栏中具有灰色->橙色堆栈图标)
有人知道我该怎么做吗?
Answers:
您将通过以下几种方法解决此问题:
寻找favicon.ico
域的根
www.domain.com/favicon.ico
寻找<link>
具有rel="shortcut icon"
属性的标签
<link rel="shortcut icon" href="https://stackoverflow.com/favicon.ico" />
寻找<link>
具有rel="icon"
属性的标签
<link rel="icon" href="https://stackoverflow.com/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");
google.com/s2/favicons
这是一个16x16的图标,这是可怕的图标,您知道在哪里拿较大的图标吗?
2020年更新
这是2020年以后可以使用的三项服务
<img height="16" width="16" src='https://icons.duckduckgo.com/ip3/www.google.com.ico' />
<img height="16" width="16" src='http://www.google.com/s2/favicons?domain=www.google.com' />
<img height="16" width="16" src='https://api.statvoo.com/favicon/?url=google.com' />
您可以使用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)中进行解析,并使用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;
请注意,图标是他们的,而不是您的。
尽量减少每个页面需要的请求数量是一个好习惯。因此,如果您需要多个图标,yandex可以在一个查询中创建一个图标图标。这是一个示例 http://favicon.yandex.net/favicon/google.com/stackoverflow.com/yandex.net/
您可以从网站的HTML获取网站图标URL。
这是favicon标签:
<link rel="icon" type="image/png" href="/someimage.png" />
您应该在此处使用正则表达式。如果未找到标签,请在网站根目录中查找“ favicon.ico”。如果未找到任何内容,则该站点没有网站图标。
您无需编程就可以做到。只需打开网站,右键单击并选择“查看源代码”即可打开该网站的HTML代码。然后在文本编辑器中搜索“ favicon” -它会将您定向到类似
<link rel="icon" href='/SOMERELATIVEPATH/favicon.ico' type="image/x-icon" />
将字符串href
带入并附加到网站的基本URL(假设是"http://WEBSITE/"
),因此它看起来像
http://WEBSITE/SOMERELATIVEPATH/favicon.ico
这是网站图标的绝对路径。如果您不是通过这种方式找到的,则它也可以位于根目录中,在这种情况下,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上,您就完成了!
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");
这是一个较晚的答案,但出于完整性考虑:要获取所有网站图标的比例接近90%几乎是困难的。
不久前,我写了一个WordPress插件:http : //wordpress.org/extend/plugins/wp-favicons/,它试图变得更近一些。
一个。首先查看favicon存储库,例如google favicons,getfavicons等。
b。如果它们都不返回图标(我通过与它们返回的默认图标匹配来检查),我首先尝试自己获取图标
C。这涉及遍历页面,还检查没有自动重定向的重定向以及遍历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等。)
http://realfavicongenerator.net/favicon_checker?site=http://stackoverflow.com可以为您提供图标图标分析,指出哪些图标图标以何种大小存在。您可以处理页面信息以查看哪个是质量最好的图标,然后将其文件名附加到URL上以进行获取。
您可以使用Getfv.co:
此页面的示例: http //g.etfv.co/https //stackoverflow.com/questions/5119041/how-can-i-get-a-web-sites-favicon
下载内容,开始吧!
编辑:
Getfv.co和fvicon.com看起来已经死了。如果您愿意的话,我找到了一个非免费的替代方法:grabicon.com。