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

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