Как получить название сайта из С#

Я пересматриваю старый старый код и наткнулся на метод получения заголовка веб-сайта на основе его 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;
}

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

Ответ 1

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

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;

Ответ 2

Чтобы выполнить это, вам нужно будет сделать пару вещей.

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

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