Sitio web a HTML – Guardar sitio web con C#

Para guardar un sitio web o una página web en HTML en C#, cargue la URL con HTMLDocument, cree HTMLSaveOptions cuando necesite personalizar el manejo de recursos y llame a document.Save(savePath, options). Use ResourceHandlingOptions para controlar JavaScript, páginas vinculadas, restricciones de URL y recursos guardados.

Aunque el acceso a Internet suele estar disponible, puede necesitar una copia sin conexión de una página web para lectura, investigación, archivado, migración o procesamiento de documentos. Guardar un sitio web en HTML permite conservar el contenido de la página y los recursos relacionados fuera del sitio original.

Hay varias razones para convertir un sitio web a HTML:

Este artículo muestra cómo guardar un sitio web o una página web usando la API Aspose.HTML for .NET. Puede personalizar el proceso – guardar un sitio web completo o guardar una sola página web.

Guardar una página web en HTML en C#

Puede usar la biblioteca Aspose.HTML for .NET para convertir un sitio web a HTML para lectura sin conexión y archivado de recursos. Siga estos pasos:

  1. Use el constructor HTMLDocument(Url) para cargar un objeto HTMLDocument desde una URL y convertir una página web a HTML.
  2. Cree una instancia de la clase HTMLSaveOptions y establezca las propiedades necesarias para personalizar el proceso de guardado. Si no inicializa HTMLSaveOptions, el proceso funcionará con las opciones de guardado predeterminadas, como se muestra en el ejemplo siguiente.
  3. Llame al método Save(savePath) o Save(savePath, options) para guardar el sitio web sin conexión.

El siguiente ejemplo de C# muestra cómo guardar una página web. Con las opciones de guardado predeterminadas, solo se guarda una página web independiente con sus recursos relacionados. Tenga en cuenta que solo se guardarán los recursos que estén en el mismo dominio que la página del sitio.

 1// Extract and save a wab page with default save options in C#
 2
 3// Initialize an HTML document from a URL
 4using HTMLDocument document = new HTMLDocument("https://docs.aspose.com/html/net/message-handlers/");
 5
 6// Prepare a path to save the downloaded file
 7string savePath = Path.Combine(OutputDir, "root/result.html");
 8
 9// Save the HTML document to the specified file
10document.Save(savePath);

Con la funcionalidad descrita en este artículo, puede guardar tanto páginas individuales como sitios web completos con recursos. Para personalizar el proceso de guardado, puede especificar opciones de manejo de recursos para el objeto HTMLSaveOptions.

HTMLSaveOptions y manejo de recursos

Las clases HTMLSaveOptions y ResourceHandlingOptions permiten personalizar el proceso de guardado. Por ejemplo, puede controlar la profundidad de las páginas que se manejarán y guardar un sitio web completo o solo una página web.

La siguiente tabla resume las principales propiedades de la clase ResourceHandlingOptions. Proporcionan opciones para manejar la profundidad máxima de página, aplicar límites o gestionar recursos externos como imágenes, archivos CSS y JavaScript al cargar un documento HTML mediante la API.

PropiedadDescripción
DefaultObtiene o establece un enum que representa el método predeterminado de manejo de recursos. Actualmente se admiten los valores Save, Ignore y Embed. El valor predeterminado es Save, lo que significa que el recurso se guardará como archivo.
JavaScriptRepresenta cómo se manejan los scripts. Actualmente se admiten los valores Save, Ignore, Discard y Embed. El valor predeterminado es Save, lo que significa que el recurso se guardará como archivo.
MaxHandlingDepthDefine la profundidad máxima de páginas que se manejarán. Use esta propiedad para controlar si Aspose.HTML guarda solo la página web actual, páginas enlazadas directamente o una estructura más profunda del sitio. Una profundidad de 1 significa que solo se manejarán las páginas referenciadas directamente desde el documento guardado. Establecer esta propiedad en -1 hará que se manejen todas las páginas. El valor predeterminado es 0.
PageUrlRestrictionContiene información sobre restricciones aplicadas a las URL de las páginas manejadas. El valor predeterminado es RootAndSubFolders, lo que significa que solo se procesan recursos en la raíz y subcarpetas.
ResourceUrlRestrictionContiene información sobre restricciones aplicadas a las URL de recursos manejados, como CSS, JavaScript, imágenes, etc. El valor predeterminado es SameHost, lo que significa que solo se procesan recursos del mismo host.

Incrustar JavaScript al guardar HTML

Aspose.HTML permite controlar la lógica para guardar scripts. Pueden guardarse en archivos separados, incrustarse o descartarse del documento resultante. El siguiente ejemplo de C# muestra cómo guardar un sitio web e incrustar recursos JavaScript en el documento HTML resultante.

Para guardar un sitio web desde URL e incrustar recursos JavaScript:

  1. Use el constructor HTMLDocument(Url) para cargar un objeto HTMLDocument desde una URL y convertir un sitio web a HTML.
  2. Cree una instancia de la clase HTMLSaveOptions y establezca la propiedad JavaScript con el valor ResourceHandling.Embed.
  3. Llame al método Save(savePath, options) para guardar el sitio web sin conexión.

En el siguiente ejemplo, la opción ResourceHandling.Embed especifica que cualquier recurso JavaScript debe incrustarse en el documento HTML al guardarlo. Esto significa que el archivo HTML resultante contendrá todos los recursos JavaScript dentro del documento, en lugar de referenciarlos como archivos externos.

 1// Download website using HTMLSaveOptions in C#
 2
 3// Initialize an HTML document from a URL
 4using HTMLDocument document = new HTMLDocument("https://docs.aspose.com/html/net/message-handlers/");
 5
 6// Create an HTMLSaveOptions object and set the JavaScript property
 7HTMLSaveOptions options = new HTMLSaveOptions
 8{
 9    ResourceHandlingOptions =
10    {
11        JavaScript = ResourceHandling.Embed
12    }
13};
14
15// Prepare a path to save the downloaded file
16string savePath = Path.Combine(OutputDir, "rootAndEmbedJs/result.html");
17
18// Save the HTML document to the specified file
19document.Save(savePath, options);

Controlar la profundidad al guardar un sitio web

La propiedad MaxHandlingDepth especifica la profundidad máxima de la jerarquía de elementos del documento HTML que se cargará y procesará. La API no cargará ni procesará elementos más allá de esta profundidad. Por lo tanto, MaxHandlingDepth optimiza el rendimiento del proceso de guardado y ayuda a reducir la memoria y la potencia de procesamiento requeridas por la API al limitar el número de elementos procesados.

De forma predeterminada, solo se guarda el documento abierto y sus recursos como una página web individual, pero puede controlar la profundidad de manejo con la propiedad MaxHandlingDepth. El siguiente ejemplo muestra cómo guardar no solo el documento, sino también las páginas a las que enlaza y cuya URL está anidada en relación con la URL de esta página. Veamos el ejemplo de C# cuando esta propiedad se establece en 1, lo que significa que solo se guardarán elementos hasta una profundidad de 1 en la jerarquía del documento HTML:

 1// Save a website with limited resource depth using C#
 2
 3// Load an HTML document from a URL
 4using HTMLDocument document = new HTMLDocument("https://docs.aspose.com/html/net/message-handlers/");
 5
 6// Create an HTMLSaveOptions object and set the MaxHandlingDepth property
 7HTMLSaveOptions options = new HTMLSaveOptions
 8{
 9    ResourceHandlingOptions =
10    {
11        MaxHandlingDepth = 1
12    }
13};
14
15// Prepare the output path for saving the downloaded content
16string savePath = Path.Combine(OutputDir, "rootAndAdjacent/result.html");
17
18// Save the document along with adjacent resources only
19document.Save(savePath, options);

Restringir URL de páginas guardadas

Aspose.HTML for .NET proporciona varias opciones para filtrar las URL de páginas guardadas de un sitio web. La propiedad PageUrlRestriction restringe la carga de páginas web desde URL o dominios específicos al guardar un documento HTML.

De forma predeterminada, la propiedad PageUrlRestriction se establece en RootAndSubFolders, lo que significa que solo se procesan páginas en la raíz y subcarpetas. Sin embargo, puede establecer esta propiedad en otro valor – SameHost o None. Establecerla en None permitirá cargar páginas web desde cualquier dominio cuyas URL estén en el sitio web guardado. Es importante usar esta propiedad con cuidado, ya que permitir que se carguen páginas desde cualquier dominio puede aumentar el riesgo de vulnerabilidades de seguridad.

En el siguiente ejemplo, se guardarán, además del documento, todas las páginas a las que hace referencia un documento HTML y que están en el mismo dominio:

 1// Save a website with restricted resource URLs using C#
 2
 3// Initialize an HTML document from a URL
 4using HTMLDocument document = new HTMLDocument("https://docs.aspose.com/html/net/message-handlers/");
 5
 6// Configure HTMLSaveOptions with restricted resource handling
 7HTMLSaveOptions options = new HTMLSaveOptions
 8{
 9    ResourceHandlingOptions =
10    {
11        MaxHandlingDepth = 1,
12        PageUrlRestriction = UrlRestriction.SameHost
13    }
14};
15
16// Prepare the output path for the saved content
17string savePath = Path.Combine(OutputDir, "rootAndManyAdjacent/result.html");
18
19// Save the HTML document and allowed resources to the specified path
20document.Save(savePath, options);

Elegir opciones para guardar sitios web

ObjetivoOpción que conviene revisar
Guardar solo la página actual y recursos del mismo dominioComportamiento predeterminado de HTMLSaveOptions
Incrustar JavaScript en el HTML guardadoResourceHandlingOptions.JavaScript = ResourceHandling.Embed
Limitar la profundidad de procesamiento de páginas enlazadasResourceHandlingOptions.MaxHandlingDepth
Restringir qué páginas enlazadas pueden cargarseResourceHandlingOptions.PageUrlRestriction
Restringir qué recursos pueden guardarseResourceHandlingOptions.ResourceUrlRestriction

Problemas comunes al guardar sitios web

ProblemaCausaSolución
Faltan algunos CSS, imágenes o scriptsLas restricciones de URL de recursos o el manejo predeterminado del mismo host impiden descargarlosRevise ResourceUrlRestriction y asegúrese de que los recursos estén permitidos por las opciones de guardado
Las páginas enlazadas no se guardanMaxHandlingDepth es 0 de forma predeterminada, por lo que solo se guardan el documento abierto y sus recursosAumente MaxHandlingDepth cuando necesite procesar páginas enlazadas
Se descargan demasiadas páginasMaxHandlingDepth o PageUrlRestriction es demasiado amplioUse una profundidad menor y restrinja URL de páginas con RootAndSubFolders o SameHost
Los archivos JavaScript siguen siendo externosEl manejo de JavaScript está configurado para guardar archivos por separado o usa el comportamiento predeterminadoEstablezca ResourceHandlingOptions.JavaScript en ResourceHandling.Embed cuando el flujo requiera scripts incrustados
Falla el guardado de una página remotaEl entorno bloquea acceso de red, certificados o recursos remotosCompruebe permisos de red, configuración de proxy y certificados CA en el entorno de ejecución

FAQ

¿Aspose.HTML for .NET puede guardar un sitio web completo?

Aspose.HTML for .NET puede guardar una página web y procesar páginas enlazadas y recursos según HTMLSaveOptions y ResourceHandlingOptions. Use MaxHandlingDepth y restricciones de URL con cuidado para controlar cuánto sitio se maneja.

¿Qué se guarda de forma predeterminada?

Con las opciones de guardado predeterminadas, se guardan el documento abierto y los recursos relacionados. Las restricciones de manejo de recursos determinan qué recursos se procesan.

¿Cómo incrusto JavaScript en el HTML guardado?

Establezca ResourceHandlingOptions.JavaScript en ResourceHandling.Embed dentro de HTMLSaveOptions y luego llame a Save(savePath, options).

¿Cómo evito descargar demasiadas páginas enlazadas?

Mantenga bajo MaxHandlingDepth y use PageUrlRestriction para limitar las páginas manejadas a la raíz, subcarpetas o el mismo host.

Otras plataformas

Artículos relacionados sobre extracción de datos

Los ejemplos completos de C# y los archivos de datos están disponibles en el repositorio GitHub de Aspose.HTML for .NET.