Pregunta

Creo que es posible con jQuery, pero cualquier código del lado del servidor ASP.NET también es bueno para mi situación.

Con jQuery puedo cargar una página, por ejemplo, en un div y filtrar el div para <title> etiqueta, pero creo que para páginas pesadas, no es bueno leer primero todo el contenido y luego leer la etiqueta del título.¿O tal vez tenga una solución muy sencilla?De todos modos no pude encontrar nada al respecto en Internet.gracias

¿Fue útil?

Solución

Bien, gracias a cjjer y Boo, acabo de leer más sobre expresiones regulares y finalmente el siguiente código funciona para mí.

Dim qq As New System.Net.WebClient
    Dim theuri As New Uri(TextBox1.Text)
    Dim res As String = qq.DownloadString(theuri)
    Dim re As Regex = New Regex("<title\b[^>]*>(.*?)</title>", RegexOptions.Singleline)
    Dim ma As Match = re.Match(res)


    If Not ma Is Nothing And ma.Success Then
        Response.Write(ma.Groups(1).Value.ToString())
    Else
        Response.Write("error")
    End If

Pero de todos modos, el problema sigue siendo, este código está descargando toda la página y buscando a través de ella, cuyo sitio web pesado tardó más de 2 o 3 segundos en completar, pero parece que es la única forma en que yo sé: | ¿Hay alguna sugerencia para refinar este código?

Otros consejos

cjjer casi lo hizo bien.

En primer lugar, cambiar la expresión regular a: <title>(?<Content>.*?)?</title>

En segundo lugar, es necesario crear un objeto partido de primera (por si acaso su URI no tiene un título).

Match tMatch = new RegEx(@"<title>(?<Content>.*?)?</title>").Match(new System.Net.WebClient().DownloadString(url));

if ((null != tMatch) && (tMatch.IsSuccess)) {
    //  yay.
    title = tMatch.Groups("Content").value;
}

Los títulos suelen aparecer dentro de los primeros pocos cientos de bytes, lo que podría intentar una petición rango por primera 1KiB más o menos, tratar de análisis que (con un analizador de corrección de errores, ya que algunas etiquetas de cierre estarán ausentes) y si eso no funciona caer de nuevo a cargar toda la página.

Sería riesgo de seguridad para que cargue cualquier otra página web a la suya, sólo para leer el título ... Usted debe hacer esto con el script del lado del servidor (asp.net, php, ...) y la salida sólo el título a su página web. Cosa de algún tipo de almacenamiento en caché, ya que es transparente a buscar títulos en cada petición.

No hay manera limpia y sencilla para recuperar el título de una página externa. Se podía hacerlo del lado del servidor usando un WebClient y analizar la respuesta.

Sin embargo, puede valer la pena revisar el requisito, ¿es realmente necesario, la cantidad de tráfico adicional y la latencia se va a generar. Considere también que usted podría estar generando carga en el sitio externo, que no se da cuenta lo que quieres es un título, la creación de la página puede ser bastante caro.

string title=Regex.Match(new System.Net.WebClient().DownloadString(url),(@"<title>(.*?)</title>"))[0].Groups[1].ToString();

try.i no estoy seguro.

No estoy seguro de si todos los servidores admiten esto.
Mira, si esto ayuda


char[] data = new char[299];
System.Net.HttpWebRequest wr =(HttpWebRequest)WebRequest.Create("http://www.yahoo.com");
wr.AddRange("bytes", 0, 299);
HttpWebResponse wre = (HttpWebResponse)wr.GetResponse();
StreamReader sr = new StreamReader(wre.GetResponseStream());
sr.Read(data, 0, 299);
Console.WriteLine((data));
sr.Close();

EDITAR:Intente consultar con alguna herramienta de monitoreo de red para averiguar cuál es el texto que envían los servidores.Utilicé Fiddler para ver el resultado y lo escribí en la consola.

EDITAR2:Supongo que el título está al principio de la página.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top