asp.net - scrapysharp - Exportar ASPX a HTML
scraping with c# (5)
@ckarras: Preferiría no usar una herramienta externa, porque quiero que las páginas HTML se creen programáticamente y no manualmente.
@jttraino: no tengo un intervalo de tiempo en el cual el sitio deba ser entregado; el uotput debe ocurrir cuando un usuario crea un sitio nuevo.
@ Frank Krueger: Realmente no entiendo cómo crear una instancia de mi página usando WebContext y WebRequest.
Busqué "wget" en searchdotnet y llegué a una publicación sobre una clase .net llamada WebClient. Parece que hago lo que quiero si uso el método DownloadString (): obtiene una cadena de una url específica. El problema es que debido a que nuestro CMS debe estar conectado, cuando el método intenta llegar a la página se lanza a la página de inicio de sesión y, por lo tanto, devuelve el HTML de login.aspx ...
¿Alguna idea de cómo puedo continuar desde aquí?
Estamos construyendo un CMS. El sitio será construido y administrado por los usuarios en páginas aspx, pero nos gustaría crear un sitio estático de HTML. La forma en que lo estamos haciendo ahora es con el código que encontré aquí que sobrecarga el método Render en la página Aspx y escribe la cadena HTML en un archivo. Esto funciona bien para una sola página, pero lo que sucede con nuestro CMS es que queremos crear automáticamente algunas páginas HTML para un sitio desde el principio, incluso antes de que el creador haya editado algo en el sistema. ¿Alguien sabe de alguna manera de hacer esto?
Puede usar wget (una herramienta de línea de comandos) para consultar recursivamente cada página y guardarlas en archivos html. Actualizaría todos los enlaces necesarios en el html resultante para hacer referencia a los archivos .html en lugar de .aspx. De esta forma, puede codificar todo su sitio como si estuviera usando páginas generadas por el servidor (más fácil de probar), y luego convertirlo a páginas estáticas.
Si necesita HTML estático solo por motivos de rendimiento, mi preferencia sería utilizar el almacenamiento en caché de resultados de ASP.Net.
Te recomiendo que hagas esto de una manera muy simple y no lo hagas en el código. Le permitirá a su código CMS hacer lo que debería hacer el código CMS y lo mantendrá lo más simple posible.
Use un producto como HTTrack . Se llama una "copiadora de sitios web". Arrastra un sitio y crea resultados html. Es rápido y gratis. Puedes hacer que funcione a la frecuencia que creas mejor.
Desvincula las necesidades de salida HTML del diseño e implementación de CMS. Reduce la complejidad y le da cierta flexibilidad en la forma en que saca el código HTML sin introducir puntos de falla en su código CMS.
Llamar al método Render
sigue siendo bastante simple. Simplemente cree una instancia de su página, cree un stub WebContext
junto con el objeto WebRequest
y llame al método Render
de la página. Entonces eres libre de hacer lo que quieras con los resultados.
Alternativamente, escriba un pequeño guión curl
o wget
para descargar y almacenar las páginas que quiera que sean estáticas.
Parece que encontré la solución para mi problema utilizando el método Server.Ecxcute.
Encontré un artículo que demostró el uso de este:
TextWriter textWriter = new StringWriter();
Server.Execute("myOtherPage.aspx", textWriter);
Luego hago unas maniulatons en el editor de texto, y lo inserto en un archivo html. Et voila! ¡Funciona!