Как я могу получить фавикон веб-сайта?


достаточно простой вопрос: я создал небольшое приложение, которое в основном является просто избранным, которое находится в моем системном трее, чтобы я мог открывать часто используемые сайты/папки/файлы из одного и того же места. Получение иконки по умолчанию из моей системы для известных типов файлов не очень сложно, но я не знаю, как сделать фавикон с сайта. (Так же есть серый - > оранжевый значок стека в адресной строке, например)

кто-нибудь знает, как я могу это сделать?

12 72

12 ответов:

вы хотите решить эту проблему несколькими способами:

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

надеюсь, что это поможет!

вот 2 варианта, я протестировал более 100 URL-адресов и получил разные результаты, которые каждый вариант. Обратите внимание, что это решение не 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' />

вы можете использовать конвертер Google S2.

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

и обратите внимание, что альтернативные значки могут быть доступны; "сенсорный" один, как правило, больше и выше res, например:

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

таким образом, вы должны проанализировать это в пакете HTML Agility Pack или XmlDocument (если xhtml) и использовать служба WebClient.DownloadFile()

вот код, который я использовал для получения этого с помощью пакета agility pack:

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

обратите внимание, что значок принадлежит им, а не вам.

Yo может получить URL-адрес favicon с веб-сайта-S HTML.

вот тег favicon:

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

здесь следует использовать регулярное выражение. Если тег не найден, ищите " favicon.МБО" в корневом каталоге сайта. Если ничего не найдено, то сайт не имеет favicon.

Это хорошая практика, чтобы свести к минимуму количество запросов, необходимых каждой странице. Так что если вам нужно несколько иконок, Яндекс может сделать спрайт фавиконов в одном запросе. Вот такой пример http://favicon.yandex.net/favicon/google.com/stackoverflow.com/yandex.net/

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

вы можете сделать это без программирования. Просто откройте веб-сайт, щелкните правой кнопкой мыши и выберите "исходный код" открыть HTML код этого сайта. Затем в текстовом редакторе найдите "фавикон" - он направит вас к чему-то похожему

<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 на вашем локальном ПК-и все готово!

это поздний ответ, но для полноты картины: довольно трудно получить даже близко к 90% загрузки всех иконок.

некоторое время назад я написал плагин WordPress:http://wordpress.org/extend/plugins/wp-favicons/ который пытается приблизиться.

a. он начинается с просмотра репозиториев 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 и т. д..)

Я обнаружил, что 'SHGetFileInfo '(Check 'www.pinvoke.net' для подписи) позволяет получить маленький или большой значок, как если бы вы имели дело с файлом/папкой/элементом оболочки.

Йенс ;)

http://realfavicongenerator.net/favicon_checker?site=http://stackoverflow.com дает вам анализ фавикона, указывающий, какие фавиконы присутствуют в каком размере. Вы можете обработать информацию о странице, чтобы увидеть, какой из них является лучшим качеством favicon, и добавить его имя файла к URL-адресу, чтобы получить его.

вы можете использовать Getfv.co:

чтобы получить favicon Вы можете hotlink его на... http://g.etfv.co / [URL]

пример для этой страницы : http://g.etfv.co/https://stackoverflow.com/questions/5119041/how-can-i-get-a-web-sites-favicon

скачать контент и поехали !

Edit:

Getfv.co и fvicon.com выглядят мертвыми. Если вы хотите, я нашел несвободную альтернативу : grabicon.com.