Як я можу отримати фавікон веб-сайту?


115

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

Хтось знає, як я можу про це піти?


1
Я не впевнений, наскільки легко (або можливо) було б автоматизувати завантаження / розбір цієї сторінки, але, схоже, є все: Favicon-Checker . Як мінімум, ви можете використовувати його як довідку / перевірку.
Кевін Феган

Ви можете просто використовувати API Statvoo Favicon , що було б досить швидко і безболісно.
AO_

Favicon Kit дозволяє отримувати та вставляти фавікони, як звичайні зображення, розмірами, значно більшими за 16 пікселів , якщо вони доступні. (Розкриття: Я автор)
AndreasPizsa

Відповіді:


234

Ви хочете вирішити це декількома способами:

  1. Шукайте favicon.icoкорінь домену

    www.domain.com/favicon.ico

  2. Шукайте <link>тег з rel="shortcut icon"атрибутом

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

  3. Шукайте <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");

1
GetFavIcon все ще працює? коли я запускаю ваш приклад, я отримую помилку 400
Жюльєн,

17
схоже, що Google має подібний сервіс зараз: google.com/s2/favicons?domain_url=stackoverflow.com
мисливець

20
якщо хтось хоче альтернативу Google, DuckDuckGo має інше рішення: icons.duckduckgo.com/ip2/www.stackoverflow.com.ico
Jose Serodio

1
@hunter google.com/s2/faviconsце ікона з 16x16 це жахлива іконка. ти знаєш, де взяти більший значок?
nideba

1
@JoseSerodio - Ну ... це було першим, що я спробував, але для домену, який я перевіряв, я просто отримав "тьмяний / тупий" образ правої вказівної стрілки (більше, ніж) всередині кола - всередині квадрата . Це виглядало так , але я перевірив, чи правильно написано "domain.com.ico". Тепер, через чудеса в Інтернеті, це працює правильно ... іди малюнок =) так, Nevermind.
Кевін Феган

19

Оновлено 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' />

4
grabicon.com тепер платна послуга, починаючи з 9 доларів на місяць
січня

1
Ще один: favicon.allesedv.com <img width = "144" height = "144" src = "// f3.allesedv.com/144/www.stackoverflow.com" />
Мартін Сейтл

Ця послуга більше не працює, ви можете використовувати api.statvoo.com/favicon/?url=stackoverflow.com . Я ним користуюся пару років, і це мене ніколи не підводило.
AO_

Дякую @AO_, я насправді використовую качку в ці дні, я оновив свою відповідь
Blowsie

1
@saintvixalien Я вважаю, що це нещодавно змінилося для людей, які не ініціалізуються за допомогою ключа API, оскільки сервери набирали толчок;) Я використовую основний сервіс за допомогою ключа API і отримую відповіді безпосередньо без обгортки. Я зробив тест без ключа API, і він перенаправляє на сервіс Google, як ви сказали ..
AO_


6

Перше, на що слід звернути увагу - /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">

тож ви б розібрали це в пакеті пакетів Agility або 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;

Зауважте, що значок їхній, а не ваш.


1
Дякую Марку. Я ціную приклад. Напишіть зображення, я не збираюся їх змінювати або використовувати для чогось іншого, крім значків у контекстному меню біля ярлика ярлика.
Стівен Еверс


3

Йо може отримати URL-адресу favicon з HTML-сайту веб-сайту.

Ось тег favicon:

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

Тут слід використовувати регулярний вираз. Якщо тегу не знайдено, шукайте "favicon.ico" у кореневому каталозі сайту. Якщо нічого не знайдено, на сайті немає фавікону.


2

Ви можете це зробити без програмування . Просто відкрийте веб-сайт, клацніть правою кнопкою миші та виберіть "переглянути джерело", щоб відкрити 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 на вашому локальному ПК - і все закінчено!


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

1

Це пізня відповідь, але для повноти: досить важко дістати навіть близько 90% добирання всіх фаворитів.

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

а. він починається з перегляду сховищ Favicon, таких як Google Favicons, getfavicons тощо ...

б. якщо жоден з них не повертає піктограму (я перевіряю це, збігаючись із значком за замовчуванням, який вони повертають), я починаю зі спроби отримати сам значок

c. це включає перехід сторінок, а також перевірку переадресацій NO без автоматичного перенаправлення, а також проходження 404, оскільки також на 404-х може бути присутня ікона. Врешті-решт, це означає, що вам доведеться розбирати також переадресації в заголовку html, а також переадресації javascript, щоб наблизитися до 100%

г. після цього я перевіряю файл фізичного зображення, тому що іноді на деяких серверах (я перевірив 300 000+) файли повертаються з неправильним типом mime тощо.

Код все ще не ідеальний, тому що в деталях він стає божевільним, ви знайдете безліч дивних ситуацій: у людей неправильно закодовані шляхи (img / favicon.ico, де img НЕ в корені), дублюються заголовки у виведенні html, різні відповіді сервера від голови та тіла тощо ...

ядро частини вилучення знаходиться тут: http://plugins.svn.wordpress.org/wp-favicons/trunk/includes/server/class-http.php, щоб ви могли змінити її інженером, але майте на увазі, що перевірка відповіді повинна дійсно робити (перевірка файлів зображень, міми тощо)


1

Я виявив, що "SHGetFileInfo" (позначте "www.pinvoke.net" для підпису) дозволяє отримати невеликий або великий значок, так само, як якщо б ви мали справу з файлом / папкою / елементом оболонки.

Єнс;)



0

Ви можете використовувати Getfv.co :

Щоб отримати фавікон, ви можете посилання на нього звернутися за адресою ... http://g.etfv.co/ evidenceURL]

Приклад для цієї сторінки: http://g.etfv.co//programming/5119041/how-can-i-get-a-web-sites-favicon

Завантажте контент і підемо!

Редагувати:

Getfv.co та fvicon.com виглядають мертвими. Якщо ви хочете, я знайшов безкоштовну альтернативу: grabicon.com .


1
Посилання мертве, помилка: не знайдено
tttony

@tttony Дійсно. fvicon.com теж виглядає мертвим. Я відредагую свій коментар із платним вмістом. Якщо ви знайдете працююче безкоштовне посилання, будь ласка, поділіться ним!
aloisdg переходить на codidact.com

0

Використання jquery

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

0

У 2020 році, використовуючи послугу duckduckgo.com від CLI

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

Приклад

curl -v https://icons.duckduckgo.com/ip2/www.cdc.gov.ico > favicon.ico
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.