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

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

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

2 ответа

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

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;
</code>


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

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

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

licensed under cc by-sa 3.0 with attribution.