¿Cómo puedo obtener el favicon de un sitio web?

115

Pregunta bastante simple: he creado una pequeña aplicación que es básicamente una de las favoritas que se encuentra en la bandeja del sistema para poder abrir sitios / carpetas / archivos de uso frecuente desde el mismo lugar. Obtener los iconos predeterminados de mi sistema para tipos de archivos conocidos no es muy complicado, pero no sé cómo obtener el favicon de un sitio web. (SO tiene el icono de pila gris-> naranja en la barra de direcciones, por ejemplo)

¿Alguien sabe cómo podría hacerlo?

Steven Evers
fuente
1
No estoy seguro de lo fácil (o posible) que sería automatizar la carga / análisis de esta página, pero parece tener todo: Favicon-Checker . Como mínimo, puede usarlo como referencia / verificación.
Kevin Fegan
Podrías usar la API Statvoo Favicon , eso sería bastante rápido e indoloro.
AO_
Favicon Kit le permite obtener e incrustar favicons como imágenes normales, en tamaños mucho mayores que 16 píxeles , si están disponibles. (Divulgación: soy el autor)
AndreasPizsa

Respuestas:

234

Querrá abordar esto de varias maneras:

  1. Busque favicon.icoen la raíz del dominio

    www.domain.com/favicon.ico

  2. Busque una <link>etiqueta con el rel="shortcut icon"atributo

    <link rel="shortcut icon" href="https://stackoverflow.com/favicon.ico" />

  3. Busque una <link>etiqueta con el rel="icon"atributo

    <link rel="icon" href="https://stackoverflow.com/favicon.png" />

Los dos últimos suelen producir una imagen de mayor calidad.


Solo para cubrir todas las bases, existen archivos de íconos específicos del dispositivo que pueden producir imágenes de mayor calidad, ya que estos dispositivos generalmente tienen íconos más grandes en el dispositivo de lo que necesitaría un navegador:

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

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


Y para descargar el ícono sin importarle cuál es el ícono, puede usar una utilidad como http://www.google.com/s2/favicons que hará todo el trabajo pesado:

var client = new System.Net.WebClient();

client.DownloadFile(
    @"http://www.google.com/s2/favicons?domain=stackoverflow.com",
    "stackoverflow.com.ico");
cazador
fuente
1
¿GetFavIcon todavía funciona? cuando ejecuto su ejemplo, obtengo un error 400
Julien
17
parece que Google tiene un servicio similar ahora: google.com/s2/favicons?domain_url=stackoverflow.com
hunter
20
si alguien quiere una alternativa a Google, DuckDuckGo tiene otra solución: icons.duckduckgo.com/ip2/www.stackoverflow.com.ico
Jose Serodio
1
@hunter google.com/s2/faviconses un ícono con 16x16 es un ícono terrible ¿sabes dónde llevar el ícono más grande?
nideba
1
@JoseSerodio - Bueno ... eso fue lo primero que intenté, pero para el dominio que estaba comprobando, acabo de obtener una imagen "tenue / aburrida" de una flecha que apunta hacia la derecha (mayor que) dentro de un círculo dentro de un cuadrado . Se veía así , pero verifiqué que tenía "dominio.com.ico" escrito correctamente. Ahora, por las maravillas de Internet, está funcionando correctamente ... imagínate =) así que, no importa.
Kevin Fegan
19

Actualizado 2020

Aquí hay tres servicios que puede utilizar a partir de 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' />
Blowsie
fuente
4
grabicon.com ahora es un servicio pago a partir de $ 9 / mes
enero
1
Otro: favicon.allesedv.com <img width = "144" height = "144" src = "// f3.allesedv.com/144/www.stackoverflow.com" />
Martin Seitl
Este servicio ya no funciona, puede usar api.statvoo.com/favicon/?url=stackoverflow.com . Lo he usado durante un par de años y nunca me ha defraudado.
AO_
Gracias @AO_, en realidad estoy usando duckduckgo estos días, he actualizado mi respuesta
Blowsie
1
@saintvixalien Creo que esto ha cambiado recientemente para las personas que no se inicializan con una clave de API, ya que los servidores estaban siendo golpeados;) Uso el servicio principal con una clave de API y obtengo respuestas directamente sin el contenedor.
Probé
6

Lo primero que debe buscar es /favicon.ico en la raíz del sitio; algo como WebClient.DownloadFile () debería funcionar bien. Sin embargo, también puede configurar el icono en los metadatos; para SO, esto es:

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

y tenga en cuenta que pueden estar disponibles iconos alternativos; el "táctil" tiende a ser más grande y de mayor resolución, por ejemplo:

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

por lo que lo analizaría en HTML Agility Pack o XmlDocument (si es xhtml) y usaría WebClient.DownloadFile ()

Aquí hay un código que he usado para obtener esto a través del paquete de agilidad:

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

Tenga en cuenta que el icono es de ellos, no suyo.

Marc Gravell
fuente
1
Gracias Marc. Agradezco el ejemplo. Escriba las imágenes, no tengo la intención de modificarlas o usarlas para nada más que iconos en el menú contextual al lado de la etiqueta del acceso directo.
Steven Evers
3

Puede obtener la URL del favicon del HTML del sitio web.

Aquí está la etiqueta de favicon:

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

Debería utilizar una expresión regular aquí. Si no encuentra ninguna etiqueta, busque "favicon.ico" en el directorio raíz del sitio. Si no se encuentra nada, el sitio no tiene favicon.

OOO '' MMM ''
fuente
2

Puedes hacerlo sin programar . Simplemente abra el sitio web, haga clic derecho y seleccione "ver fuente" para abrir el código HTML de ese sitio. Luego, en el editor de texto, busque "favicon" ; lo dirigirá a algo parecido

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

tome la cadena hrefy añádala a la URL base del sitio web (supongamos que lo es "http://WEBSITE/"), por lo que parece

http://WEBSITE/SOMERELATIVEPATH/favicon.ico

que es el camino absoluto al favicon. Si no lo encontró de esta manera, también puede estar en la raíz, en cuyo caso la URL es http://WEBSITE/favicon.ico.

Tome la URL que determinó e insértela en el siguiente código:

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

Guarde este código HTML localmente (por ejemplo, en su escritorio) como GetFavicon.htmly luego haga doble clic en él para abrirlo. Mostrará solo un enlace llamado Favicon . Haz clic derecho en este enlace y selecciona "Guardar destino como ..." para guardar el Favicon en tu PC local, ¡y listo!

Mate
fuente
1
        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");
pmcilreavy
fuente
1

Esta es una respuesta tardía, pero para completar: es bastante difícil acercarse al 90% de la búsqueda de todos los favicons.

Hace un tiempo escribí un complemento de WordPress: http://wordpress.org/extend/plugins/wp-favicons/ que intenta acercarse.

a. Comienza mirando repositorios de favicon como google favicons, getfavicons, etc.

si. si ninguno de ellos devuelve un ícono (verifico esto haciendo coincidir con el ícono predeterminado que devuelven), comienzo intentando obtener el ícono yo mismo

C. esto implica atravesar las páginas, pero también verificar las redirecciones sin redireccionamiento automático, así como atravesar 404 porque también en 404 podría estar presente un icono. Al final, significa que tendrá que analizar también las redirecciones en el encabezado html, así como las redirecciones de JavaScript para acercarse al 100%.

re. después de eso, hago algunas inspecciones en el archivo de imagen física, porque también a veces en algunos servidores (probé más de 300.000) los archivos se devuelven con el tipo de mime incorrecto, etc.

El código aún no es perfecto porque en los detalles se vuelve loco, encontrarás muchas situaciones extrañas: personas tienen rutas codificadas incorrectamente (img / favicon.ico donde img NO está en la raíz), encabezados duplicados en la salida html, diferentes respuestas del servidor de una cabeza y un cuerpo, etc ...

el núcleo de la parte de búsqueda está aquí: http://plugins.svn.wordpress.org/wp-favicons/trunk/includes/server/class-http.php para que pueda realizar ingeniería inversa, pero tenga en cuenta que la validación de la respuesta debe realmente hecho (verificando el tipo de archivo de imagen, mímica, etc.)

edelwater
fuente
1

Descubrí que 'SHGetFileInfo' (Verifique 'www.pinvoke.net' para la firma) le permite recuperar un ícono pequeño o grande, como si estuviera tratando con un archivo / carpeta / elemento de Shell.

Jens;)

Jens
fuente
0

Puede utilizar Getfv.co :

Para recuperar un favicon, puede vincularlo en ... http://g.etfv.co/[URL]

Ejemplo de esta página: http://g.etfv.co//programming/5119041/how-can-i-get-a-web-sites-favicon

Descarga contenido y ¡vamos!

Editar:

Getfv.co y fvicon.com parecen muertos. Si quieres, encontré una alternativa no gratuita: grabicon.com .

aloisdg se muda a codidact.com
fuente
1
Enlace muerto, error: no encontrado
tttony
@tttony De hecho. fvicon.com también parece muerto. Editaré mi comentario con contenido pago. Si encuentra un enlace gratuito que funcione, ¡compártalo!
aloisdg se muda a codidact.com
0

Usando jquery

var favicon = $("link[rel='shortcut icon']").attr("href") ||
              $("link[rel='icon']").attr("href") || "";
Vicepresidente
fuente
0

En 2020, utilizando el servicio de duckduckgo.com de la CLI

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

Ejemplo

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