2008-11-30 25 views
13

Estoy revisando un código antiguo mío y me he topado con un método para obtener el título de un sitio web en función de su url. No es realmente lo que usted llamaría un método estable, ya que a menudo no produce un resultado y, a veces incluso produce resultados incorrectos. Además, a veces no muestra algunos de los caracteres del título ya que son de una codificación alternativa.Cómo obtener el título del sitio web de C#

¿Alguien tiene sugerencias para mejorar esta versión anterior?

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; 
} 

Una nota final - Me gustaría que el código se ejecute más rápido, así, ya que es el bloqueo hasta que la página ya sido exagerado, por lo que si puedo conseguir sólo el encabezado del sitio y no toda la página, sería Se bueno.

Respuesta

33

Una forma más sencilla de obtener el contenido:

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

Una manera más simple, más fiable para obtener el título:

string title = Regex.Match(source, @"\<title\b[^>]*\>\s*(?<Title>[\s\S]*?)\</title\>", RegexOptions.IgnoreCase).Groups["Title"].Value; 
+0

¿Hay alguna manera de establecer un tiempo de espera cuando se usa WebClient? –

+0

Creo que lo único que se debe agregar es que debe agregar @ (para las cosas de escape) al patrón, es decir: @ "\ ] * \> \ s * (? [\ s \ S] * ?) \</title\> " – <span class="text-secondary"> <small> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/31791/">netadictos</a></span> <span></span> </small> </span> </p> </div> </div> </div> <div itemprop="comment" class="post-comment"> <div class="row"> <div class="col-lg-1"><span class="text-secondary">+0</span></div> <div class="col-lg-11"> <p class="commenttext">Para agregar tiempo de espera (y otras cosas) a la clase WebClient, esta guía proporciona una buena solución: http://codegator.com/mcook/archive/2006/07/17/extending-webclient-using- c.aspx – <span class="text-secondary"> <small> <span></span> </small> </span> </p> </div> </div> </div> </div> </div> </article> <div> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="1038284119" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <article class="board-top-1 padding-top-10"> <div class="post-col vote-info"> <span class="count">0<i class="fa fa-thumbs-up"></i></span> </div> <div class="post-offset"> <div class="answer fmt"> <p>Para hacer esto, vas a necesitar hacer un par de cosas.</p> <ul> <li>Haga que la aplicación se enhebre, de modo que pueda procesar varias solicitudes al mismo tiempo y maximizar el número de solicitudes HTTP que se están realizando.</li> <li>Durring la solicitud asíncrona, descargar sólo la cantidad de datos que desea dar marcha atrás, que probablemente podría hacer el análisis de los datos, ya que viene de vuelta en busca de</li> <li>probable que desee utilizar expresiones regulares para sacar el nombre del título</li> </ul> <p>He hecho esto antes con los bots de SEO y he podido manejar casi 10,000 solicitudes a la vez. Solo necesita asegurarse de que cada solicitud web pueda contenerse en un hilo.</p> </div> <div class="post-info"> <div class="post-meta row"> <p class="text-secondary col-lg-6"> <span class="source"> <a rel="noopener" target="_blank" href="https://stackoverflow.com/q/329317">Fuente</a> </span> </p> <p class="text-secondary col-lg-6"> <span class="float-right date"> <span>2008-11-30 20:29:34</span> </p> <p class="col-12"></p> <p class="col-12"></p></div> </div> <!-- comments --> <div class="comments"> <div itemprop="comment" class="post-comment"> <div class="row"> <div class="col-lg-1"><span class="text-secondary">+0</span></div> <div class="col-lg-11"> <p class="commenttext">Por supuesto que * no * quiere dar a cada petición propia ¡enhebrar si quieres manejar 10,000 solicitudes a la vez! (La pila involucrada te comería tu memoria como loca.) Usar una API asíncrona pondrá en paralelo la operación * sin * que le cueste un hilo por solicitud. – <span class="text-secondary"> <small> <span></span> </small> </span> </p> </div> </div> </div> <div itemprop="comment" class="post-comment"> <div class="row"> <div class="col-lg-1"><span class="text-secondary">+0</span></div> <div class="col-lg-11"> <p class="commenttext">Es un punto discutible ya que solo necesito realizar una sola solicitud a la vez. La necesidad de velocidad se debe a que el usuario está esperando la respuesta. – <span class="text-secondary"> <small> <span></span> </small> </span> </p> </div> </div> </div> <div itemprop="comment" class="post-comment"> <div class="row"> <div class="col-lg-1"><span class="text-secondary">+0</span></div> <div class="col-lg-11"> <p class="commenttext">@Jon, bueno, como dije, el mío era un robot de SEO que analiza y, obviamente, desea poner límites a la cantidad de solicitudes a la vez por análisis para mantener la memoria razonable. Sin embargo, el 10,000 fue un escenario de prueba de estrés. Y la asincrónica fue una sugerencia sobre cómo descargar el encabezado. – <span class="text-secondary"> <small> <span></span> </small> </span> </p> </div> </div> </div> </div> </div> </article> </div> <div class="clearfix"> </div> <div class="relative-box"> <div class="relative">Cuestiones relacionadas</div> <ul class="relative_list"> <li> 1. <a href="http://es.uwenku.com/question/p-qsftcrpu-x.html" target="_blank" title="Obtener datos del sitio web"> Obtener datos del sitio web </a> </li> <li> 2. <a href="http://es.uwenku.com/question/p-fgillwtk-bx.html" target="_blank" title="¿Cómo leer el contenido del sitio web en C#?"> ¿Cómo leer el contenido del sitio web en C#? </a> </li> <li> 3. <a href="http://es.uwenku.com/question/p-uymomorr-bo.html" target="_blank" title="Google API | URL al título del sitio"> Google API | URL al título del sitio </a> </li> <li> 4. <a href="http://es.uwenku.com/question/p-mvuvsjap-bp.html" target="_blank" title="Obtención de título y meta etiquetas de sitio web externo"> Obtención de título y meta etiquetas de sitio web externo </a> </li> <li> 5. <a href="http://es.uwenku.com/question/p-hxftjcaz-bg.html" target="_blank" title="obtener el sitio web ip usando php"> obtener el sitio web ip usando php </a> </li> <li> 6. <a href="http://es.uwenku.com/question/p-svvgpnnq-bd.html" target="_blank" title="obtener valor de la etiqueta del cuerpo del sitio web"> obtener valor de la etiqueta del cuerpo del sitio web </a> </li> <li> 7. <a href="http://es.uwenku.com/question/p-bamyuaaf-q.html" target="_blank" title="cómo obtener la dirección MAC del cliente que navega por el sitio web asp.net mvc C#"> cómo obtener la dirección MAC del cliente que navega por el sitio web asp.net mvc C# </a> </li> <li> 8. <a href="http://es.uwenku.com/question/p-fsdpgpan-v.html" target="_blank" title="Obtener el favicon del sitio web con JS"> Obtener el favicon del sitio web con JS </a> </li> <li> 9. <a href="http://es.uwenku.com/question/p-gptrdzcw-bp.html" target="_blank" title="Obtener datos del sitio web en Adobe InDesign"> Obtener datos del sitio web en Adobe InDesign </a> </li> <li> 10. <a href="http://es.uwenku.com/question/p-owtdkado-a.html" target="_blank" title="¿Cómo obtener el valor del título del documento en látex?"> ¿Cómo obtener el valor del título del documento en látex? </a> </li> <div> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block; text-align:center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-6208739752673518" data-ad-slot="4606349252"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <li> 11. <a href="http://es.uwenku.com/question/p-ymxpoklr-be.html" target="_blank" title="Obtener la raíz del sitio web de NSString o NSUrl"> Obtener la raíz del sitio web de NSString o NSUrl </a> </li> <li> 12. <a href="http://es.uwenku.com/question/p-pbqlrbto-c.html" target="_blank" title="¿Cómo puedo obtener el favicón de un sitio web?"> ¿Cómo puedo obtener el favicón de un sitio web? </a> </li> <li> 13. <a href="http://es.uwenku.com/question/p-odwfeeds-g.html" target="_blank" title="Orchard - Obtener el título del contenido del diseño del tema"> Orchard - Obtener el título del contenido del diseño del tema </a> </li> <li> 14. <a href="http://es.uwenku.com/question/p-qgscdvkw-t.html" target="_blank" title="Cómo ignorar el error 401 no autorizado de webrequest para obtener el estado del sitio web"> Cómo ignorar el error 401 no autorizado de webrequest para obtener el estado del sitio web </a> </li> <li> 15. <a href="http://es.uwenku.com/question/p-phpimkop-bm.html" target="_blank" title="Convertir el sitio web del sistema de archivos al sitio web de IIS"> Convertir el sitio web del sistema de archivos al sitio web de IIS </a> </li> <li> 16. <a href="http://es.uwenku.com/question/p-oqksumqj-t.html" target="_blank" title="¿Cómo obtener enlaces de sitio de Google en un sitio web?"> ¿Cómo obtener enlaces de sitio de Google en un sitio web? </a> </li> <li> 17. <a href="http://es.uwenku.com/question/p-ayvuedqz-bd.html" target="_blank" title="Solución de análisis web para el creador del sitio web"> Solución de análisis web para el creador del sitio web </a> </li> <li> 18. <a href="http://es.uwenku.com/question/p-tqyzlmix-p.html" target="_blank" title="¿Cómo proteger el recurso del sitio web de la descarga?"> ¿Cómo proteger el recurso del sitio web de la descarga? </a> </li> <li> 19. <a href="http://es.uwenku.com/question/p-knaqrfvm-bs.html" target="_blank" title="¿Obtener la URL del sitio web desde Application_Start?"> ¿Obtener la URL del sitio web desde Application_Start? </a> </li> <li> 20. <a href="http://es.uwenku.com/question/p-cjbcifhj-bb.html" target="_blank" title="Seguridad del sitio web: ¿cómo aprender?"> Seguridad del sitio web: ¿cómo aprender? </a> </li> <li> 21. <a href="http://es.uwenku.com/question/p-hsacgxos-bd.html" target="_blank" title="Obtener el nombre de un sitio IIS para un sitio web ASP.NET"> Obtener el nombre de un sitio IIS para un sitio web ASP.NET </a> </li> <li> 22. <a href="http://es.uwenku.com/question/p-nusvjrre-e.html" target="_blank" title="¿Cómo obtener toda la información del cliente de los visitantes del sitio web?"> ¿Cómo obtener toda la información del cliente de los visitantes del sitio web? </a> </li> <li> 23. <a href="http://es.uwenku.com/question/p-nvzkkrvq-e.html" target="_blank" title="¿Cómo perfilas tu sitio web/aplicación web?"> ¿Cómo perfilas tu sitio web/aplicación web? </a> </li> <li> 24. <a href="http://es.uwenku.com/question/p-sxhasvsv-bv.html" target="_blank" title="¿Cómo mejorar el rendimiento del sitio web en iPad/iPhone?"> ¿Cómo mejorar el rendimiento del sitio web en iPad/iPhone? </a> </li> <li> 25. <a href="http://es.uwenku.com/question/p-vaageprc-b.html" target="_blank" title="¿Cómo especificar el idioma del sitio web? (¿HTML?)"> ¿Cómo especificar el idioma del sitio web? (¿HTML?) </a> </li> <li> 26. <a href="http://es.uwenku.com/question/p-htttwnjj-bw.html" target="_blank" title="de sesión en el sitio web, a través de C#"> de sesión en el sitio web, a través de C# </a> </li> <li> 27. <a href="http://es.uwenku.com/question/p-zliyvciw-bd.html" target="_blank" title="Selección del idioma del sitio web"> Selección del idioma del sitio web </a> </li> <li> 28. <a href="http://es.uwenku.com/question/p-yhwzataf-r.html" target="_blank" title="Cómo obtener el valor de cookie en el sitio web asp.net"> Cómo obtener el valor de cookie en el sitio web asp.net </a> </li> <li> 29. <a href="http://es.uwenku.com/question/p-chbrvstd-y.html" target="_blank" title="¿Cómo obtengo el título del botón MessageBox?"> ¿Cómo obtengo el título del botón MessageBox? </a> </li> <li> 30. <a href="http://es.uwenku.com/question/p-tybeskbu-bn.html" target="_blank" title="Sistema de insignia del sitio web"> Sistema de insignia del sitio web </a> </li> </ul> </div> <div> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-6208739752673518" data-ad-slot="1575177025"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="padding-top-10"></div> </div> </div> <script type="text/javascript" src="http://img.uwenku.com/uwenku/script/side.js?t=1644592048471"></script> <script type="text/javascript" src="http://img.uwenku.com/uwenku/plugin/highlight/highlight.pack.js"></script> <link href="http://img.uwenku.com/uwenku/plugin/highlight/styles/docco.css" media="screen" rel="stylesheet" type="text/css" /> <script type="text/javascript"> $('pre').each(function(i, e) { hljs.highlightBlock(e, "<span class='indent'> </span>", false) }); </script> <div class="col-lg-3 col-md-4 col-sm-5"> <div id="rightTop"> <div class="row"> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="5415218910" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="row sidebar panel panel-default"> <div class="panel-heading font-bold"> Última pregunta </div> <div class="m-b-sm m-t-sm clearfix"> <ul class="side_article_list"> <li class="side_article_list_item"> 1. <a href="http://es.uwenku.com/question/p-gzfydlhp-x.html" target="_blank" title="análisis de sentimiento - wordNet, léxico sentiWordNet"> análisis de sentimiento - wordNet, léxico sentiWordNet </a> </li> <li class="side_article_list_item"> 2. <a href="http://es.uwenku.com/question/p-pntdmlaw-v.html" target="_blank" title="SKStoreProductViewController y GKHostedAuthenticateViewController no tienen modos de paisaje de iPhone"> SKStoreProductViewController y GKHostedAuthenticateViewController no tienen modos de paisaje de iPhone </a> </li> <li class="side_article_list_item"> 3. <a href="http://es.uwenku.com/question/p-qomonaka-t.html" target="_blank" title="¿Cómo comparar dos archivos de texto para el mismo texto exacto usando BASH?"> ¿Cómo comparar dos archivos de texto para el mismo texto exacto usando BASH? </a> </li> <li class="side_article_list_item"> 4. <a href="http://es.uwenku.com/question/p-syfxxltv-o.html" target="_blank" title="Cómo cambiar ItemsPanelTemplate WrapGrid ¿De código XAML?"> Cómo cambiar ItemsPanelTemplate WrapGrid ¿De código XAML? </a> </li> <li class="side_article_list_item"> 5. <a href="http://es.uwenku.com/question/p-qconziru-n.html" target="_blank" title="C# banco ejemplo - clase para clientes - qué para retiros, depósitos, etc."> C# banco ejemplo - clase para clientes - qué para retiros, depósitos, etc. </a> </li> <li class="side_article_list_item"> 6. <a href="http://es.uwenku.com/question/p-gfcrbqqg-n.html" target="_blank" title="¿Por qué las lambdas pueden convertir llamadas a funciones en Acciones?"> ¿Por qué las lambdas pueden convertir llamadas a funciones en Acciones? </a> </li> <li class="side_article_list_item"> 7. <a href="http://es.uwenku.com/question/p-vyxdxrsm-c.html" target="_blank" title="debe usar el fragmento de esquema para la lista de productos también?"> debe usar el fragmento de esquema para la lista de productos también? </a> </li> <li class="side_article_list_item"> 8. <a href="http://es.uwenku.com/question/p-tawjxzds-h.html" target="_blank" title="Matlab - Seleccionar fila específica según la condición"> Matlab - Seleccionar fila específica según la condición </a> </li> <li class="side_article_list_item"> 9. <a href="http://es.uwenku.com/question/p-urdtauoq-g.html" target="_blank" title="Sembrando correctamente el método rand_r (int * val)"> Sembrando correctamente el método rand_r (int * val) </a> </li> <li class="side_article_list_item"> 10. <a href="http://es.uwenku.com/question/p-wghohgkd-bt.html" target="_blank" title="¿Cómo configurar el host actual para la estrategia de pasaporte callbackURL?"> ¿Cómo configurar el host actual para la estrategia de pasaporte callbackURL? </a> </li> </ul> </div> </div> </div> <p class="article-nav-bar"></p> <div class="row sidebar article-nav"> <div class="row box_white visible-sm visible-md visible-lg margin-zero"> <div class="top"> <h3 class="title"><i class="glyphicon glyphicon-th-list"></i> Cuestiones relacionadas</h3> </div> <div class="article-relative-content"> <ul class="side_article_list"> <li class="side_article_list_item"> 1. <a href="http://es.uwenku.com/question/p-qsftcrpu-x.html" target="_blank" title="Obtener datos del sitio web"> Obtener datos del sitio web </a> </li> <li class="side_article_list_item"> 2. <a href="http://es.uwenku.com/question/p-fgillwtk-bx.html" target="_blank" title="¿Cómo leer el contenido del sitio web en C#?"> ¿Cómo leer el contenido del sitio web en C#? </a> </li> <li class="side_article_list_item"> 3. <a href="http://es.uwenku.com/question/p-uymomorr-bo.html" target="_blank" title="Google API | URL al título del sitio"> Google API | URL al título del sitio </a> </li> <li class="side_article_list_item"> 4. <a href="http://es.uwenku.com/question/p-mvuvsjap-bp.html" target="_blank" title="Obtención de título y meta etiquetas de sitio web externo"> Obtención de título y meta etiquetas de sitio web externo </a> </li> <li class="side_article_list_item"> 5. <a href="http://es.uwenku.com/question/p-hxftjcaz-bg.html" target="_blank" title="obtener el sitio web ip usando php"> obtener el sitio web ip usando php </a> </li> <li class="side_article_list_item"> 6. <a href="http://es.uwenku.com/question/p-svvgpnnq-bd.html" target="_blank" title="obtener valor de la etiqueta del cuerpo del sitio web"> obtener valor de la etiqueta del cuerpo del sitio web </a> </li> <li class="side_article_list_item"> 7. <a href="http://es.uwenku.com/question/p-bamyuaaf-q.html" target="_blank" title="cómo obtener la dirección MAC del cliente que navega por el sitio web asp.net mvc C#"> cómo obtener la dirección MAC del cliente que navega por el sitio web asp.net mvc C# </a> </li> <li class="side_article_list_item"> 8. <a href="http://es.uwenku.com/question/p-fsdpgpan-v.html" target="_blank" title="Obtener el favicon del sitio web con JS"> Obtener el favicon del sitio web con JS </a> </li> <li class="side_article_list_item"> 9. <a href="http://es.uwenku.com/question/p-gptrdzcw-bp.html" target="_blank" title="Obtener datos del sitio web en Adobe InDesign"> Obtener datos del sitio web en Adobe InDesign </a> </li> <li class="side_article_list_item"> 10. <a href="http://es.uwenku.com/question/p-owtdkado-a.html" target="_blank" title="¿Cómo obtener el valor del título del documento en látex?"> ¿Cómo obtener el valor del título del documento en látex? </a> </li> </ul> </div> </div> </div> </div> </div> </div> </div><!-- wrap end--> <!-- footer --> <footer id="footer"> <div class="bg-simple lt"> <div class="container"> <div class="row padder-v m-t"> <div class="col-xs-8"> <ul class="list-inline"> <li><a href="http://es.uwenku.com/contact">Contactanos</a></li> <li>© 2020 ES.UWENKU.COM</li> <li><a target="_blank" href="https://beian.miit.gov.cn/">沪ICP备13005482号-4</a></li> <li><script type="text/javascript" src="https://v1.cnzz.com/z_stat.php?id=1280101193&web_id=1280101193"></script></li> <li><a href="http://www.uwenku.com/" target="_blank" title="优文库">简体中文</a></li> <li><a href="http://hk.uwenku.com/" target="_blank" title="優文庫">繁體中文</a></li> <li><a href="http://ru.uwenku.com/" target="_blank" title="поле вопросов и ответов">Русский</a></li> <li><a href="http://de.uwenku.com/" target="_blank" title="Frage - und - antwort - Park">Deutsch</a></li> <li><a href="http://es.uwenku.com/" target="_blank" title="Preguntas y respuestas">Español</a></li> <li><a href="http://hi.uwenku.com/" target="_blank" title="कार्यक्रम प्रश्न और उत्तर पार्क">हिन्दी</a></li> <li><a href="http://it.uwenku.com/" target="_blank" title="IL Programma di chiedere Park">Italiano</a></li> <li><a href="http://ja.uwenku.com/" target="_blank" title="プログラム問答園区">日本語</a></li> <li><a href="http://ko.uwenku.com/" target="_blank" title="프로그램 문답 단지">한국어</a></li> <li><a href="http://pl.uwenku.com/" target="_blank" title="program o park">Polski</a></li> <li><a href="http://tr.uwenku.com/" target="_blank" title="Program soru ve cevap parkı">Türkçe</a></li> <li><a href="http://vi.uwenku.com/" target="_blank" title="Đáp ứng viên">Tiếng Việt</a></li> <li><a href="http://fr.uwenku.com/" target="_blank" title="Programme interrogation Park">Française</a></li> </ul> </div> </div> </div> </div> </div> </footer> <!-- / footer --> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?f78a970f17b19a79fc477a3378096f29"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </body> </html>