Как получить название сайта с C # - PullRequest
14 голосов
/ 30 ноября 2008

Я пересматриваю свой старый код и наткнулся на метод получения названия сайта на основе его URL. Это не совсем то, что вы бы назвали стабильным методом, поскольку он часто не дает результата, а иногда даже дает неверные результаты. Кроме того, иногда не отображаются некоторые символы из заголовка, так как они имеют альтернативную кодировку.

У кого-нибудь есть предложения по улучшению этой старой версии?

public static string SuggestTitle(string url, int timeout)
{
    WebResponse response = null;
    string line = string.Empty;

    try
    {
        WebRequest request = WebRequest.Create(url);
        request.Timeout = timeout;

        response = request.GetResponse();
        Stream streamReceive = response.GetResponseStream();
        Encoding encoding = System.Text.Encoding.GetEncoding("utf-8");
        StreamReader streamRead = new System.IO.StreamReader(streamReceive, encoding);

        while(streamRead.EndOfStream != true)
        {
            line = streamRead.ReadLine();
            if (line.Contains("<title>"))
            {
                line = line.Split(new char[] { '<', '>' })[2];
                break;
            }
        }
    }
    catch (Exception) { }
    finally
    {
        if (response != null)
        {
            response.Close();
        }
    }

    return line;
}

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

Ответы [ 3 ]

40 голосов
/ 30 ноября 2008

Более простой способ получить контент:

WebClient x = new WebClient();
string source = x.DownloadString("http://www.singingeels.com/");

Более простой и надежный способ получить титул:

string title = Regex.Match(source, @"\<title\b[^>]*\>\s*(?<Title>[\s\S]*?)\</title\>",
    RegexOptions.IgnoreCase).Groups["Title"].Value;
4 голосов
/ 26 марта 2018

Возможно, с этим предложением вам откроется новый мир У меня тоже был этот вопрос и я пришел к этому

Загрузите "Html Agility Pack" с http://html -agility-pack.net /? Z = codeplex

Или перейдите на nuget: https://www.nuget.org/packages/HtmlAgilityPack/ И добавить в эту ссылку.

Добавьте следующее, используя в файле кода:

using HtmlAgilityPack;

Напишите следующий код в вашем методе:

var webGet = new HtmlWeb();
var document = webGet.Load(url);    
var title = document.DocumentNode.SelectSingleNode("html/head/title").InnerText;

Источники:

https://codeshare.co.uk/blog/how-to-scrape-meta-data-from-a-url-using-htmlagilitypack-in-c/ HtmlAgilityPack получить заголовок и мета

0 голосов
/ 30 ноября 2008

Для этого вам понадобится сделать пару вещей.

  • Сделайте ваше приложение многопоточным, чтобы вы могли обрабатывать несколько запросов одновременно и максимизировать количество выполняемых HTTP-запросов.
  • Во время асинхронного запроса загружайте только тот объем данных, который вы хотите получить, вы, вероятно, могли бы выполнить синтаксический анализ данных, когда они возвращаются в поиске
  • Вероятно, хотите использовать регулярное выражение, чтобы вытащить название заголовка

Я делал это раньше с помощью SEO-ботов и смог обработать почти 10 000 запросов одновременно. Вам просто нужно убедиться, что каждый веб-запрос может содержаться в потоке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...