Получить URL-адрес favicon с внешнего сайта [дубликат]

Исправить исключение NullReferenceException можно с помощью Null-условных операторов в c # 6 и написать меньше кода для обработки нулевых проверок.

Он используется для проверки нуля до выполнения доступа к члену (?. ) или index (? [).

Пример

  var name = p?.Spouse?.FirstName;

эквивалентен:

    if (p != null)
    {
        if (p.Spouse != null)
        {
            name = p.Spouse.FirstName;
        }
    }

В результате имя будет нулевым когда p равно null или когда p.Spouse имеет значение null.

В противном случае имени переменной будет присвоено значение p.Spouse.FirstName.

Для получения дополнительной информации: Операторы с нулевым условием

72
задан Steven Evers 25 February 2011 в 16:25
поделиться

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

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

165
ответ дан hunter 26 August 2018 в 21:26
поделиться

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

3
ответ дан doroshko 26 August 2018 в 21:26
поделиться

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

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

a. он начинается с просмотра репозиториев favicon, таких как favicons google, getfavicons и т. д. ...

b. если ни один из них не возвращает значок (я проверяю это, сопоставляя значок по умолчанию, который они возвращают). Сначала я попытаюсь получить значок сам

c. это включает в себя перемещение страниц, но также проверку перенаправления с NO 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 и т. д.)

1
ответ дан edelwater 26 August 2018 в 21:26
поделиться

Вот 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' />
10
ответ дан janot 26 August 2018 в 21:26
поделиться

Первое, что нужно искать, это /favicon.ico в корне сайта; что-то вроде WebClient.DownloadFile () должно преуспеть. Однако вы также можете установить значок в метаданных - для SO это:

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

и обратите внимание, что доступны альтернативные значки; «touch» имеет тенденцию быть больше и выше 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;

Обратите внимание, что значок является их, а не вашим.

5
ответ дан Marc Gravell 26 August 2018 в 21:26
поделиться

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

2
ответ дан Matt 26 August 2018 в 21:26
поделиться

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

Вот тег favicon:

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

Здесь вы должны использовать регулярное выражение. Если тег не найден, найдите «favicon.ico» в корневом каталоге сайта. Если ничего не найдено, на сайте нет значка.

3
ответ дан OOO ''MMM'' 26 August 2018 в 21:26
поделиться
        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");
2
ответ дан pmcilreavy 26 August 2018 в 21:26
поделиться
7
ответ дан raminjacobson 26 August 2018 в 21:26
поделиться
0
ответ дан Community 26 August 2018 в 21:26
поделиться

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

Jens;)

1
ответ дан Jens 26 August 2018 в 21:26
поделиться

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

0
ответ дан robotik 26 August 2018 в 21:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: