Website to HTML – Как сохранить веб-сайт на C#

Хотя в наши дни проводной Интернет или Wi-Fi доступен повсюду, бывает, что время от времени у вас может отсутствовать подключение к Интернету; например, между остановками метро, ​​в поездке или в самолете. Чтобы иметь доступ к информации без подключения к сети, вам необходимо загружать и сохранять содержимое различных веб-сайтов, чтобы использовать их в автономном режиме, возможно, для чтения, исследования или развлечения.

Есть несколько причин, по которым вы хотели бы сохранить веб-сайт как HTML файл:

В этой статье описаны способы cохранения веб-сайта с URL-адреса с помощью Aspose.HTML для .NET API. Вы можете настроить процесс сохранения – загрузить весь веб-сайт или загрузить веб-страницу.

Сохранить веб-сайт – Website to HTML

Вы можете использовать библиотеку Aspose.HTML для .NET для извлечения и сохранения веб-сайта для чтения в автономном режиме без каких-либо проблем. Чтобы загрузить веб-сайт с URL-адреса, вам необходимо выполнить несколько следующих шагов:

  1. Используйте конструктор HTMLDocument(Url) для загрузки объекта HTMLdocument из URL-адреса.
  2. Создайте экземпляр класса HTMLSaveOptions и задайте необходимые свойства для настройки процесса загрузки. Если вы не инициализируете HTMLSaveOptions, процесс загрузки будет работать с параметрами сохранения по умолчанию, как показано в примере ниже.
  3. Вызовите Save(savePath) или Save(savePath, options ) метод сохранения веб-сайта в автономном режиме.

В следующем примере C# показано, как загрузить веб-сайт с параметрами сохранения по умолчанию. Вы извлекаете только отдельную веб-страницу со связанными ресурсами, используя параметры сохранения по умолчанию. Обратите внимание, что будут сохранены только те ресурсы, которые находятся в том же домене, что и страница сайта.

1using System.IO;
2using Aspose.Html;
3...
4    // Initialize HTML document from URL
5    using var document = new HTMLDocument("https://docs.aspose.com/html/net/message-handlers/");
6
7    // Save the HTML document to the specified file
8    document.Save(Path.Combine(OutputDir, "root/result.html"));

С помощью функционала, описанного в этой статье, вы сможете сохранять как отдельные страницы, так и целые сайты с ресурсами. Чтобы настроить процесс загрузки, вы можете указать параметры обработки ресурсов для объекта HTMLSaveOptions.

Варианты обработки ресурсов

Используя HTMLSaveOptions и ResourceHandlingOptions позволяет настроить процесс сохранения. Например, вы можете управлять глубиной обрабатываемых страниц и загружать весь веб-сайт или сохранять только отдельные веб-страницы.

В таблице ниже приведены основные свойства класса ResourceHandlingOptions. Они предоставляют параметры для обработки максимальной глубины страницы, применения ограничений или обработки внешних ресурсов, таких как изображения, файлы CSS и JavaScript, при загрузке документа HTML с помощью API.

PropertyDescription
DefaultGets or sets an enum representing the default resource handling method. Currently, Save, Ignore, and Embed values are supported. The default value is Save, meaning the resource will be saved as a file.
JavaScriptRepresents the way scripts are handled. Currently, Save, Ignore, Discard, and Embed values are supported. The default value is Save, meaning the resource will be saved as a file.
MaxHandlingDepthThis property contains information about the maximum depth of pages that will be handled. Using this property, you can manipulate the depth of pages that will be handled and download entire website or only save individual web pages. A depth of 1 means only pages directly referenced from the saved document will be handled. Setting this property to -1 will lead to the handling of all pages. The default value is 0.
PageUrlRestrictionContains information about restrictions applied to URLs of handled pages. The default value is RootAndSubFolders, meaning only resources in the root and subfolders are processed.
ResourceUrlRestrictionThis property contains information about restrictions applied to URLs of handled resources such as CSS, js, images, etc. The default value is SameHost, meaning only resources in the same host are processed.

Cохранить веб-сайт, используя свойство JavaScript

Aspose.HTML предоставляет возможность управлять логикой сохранения скриптов. Их можно сохранить в отдельные файлы, внедрить или выкинуть из получившегося документа. В следующем примере C# показано, как извлечь веб-сайт и внедрить все сценарии JavaScript, которые необходимо сохранить, в результирующий HTML-документ.

  1. Используйте конструктор HTMLDocument(Url) для загрузки объекта HTMLdocument из URL-адреса.
  2. Создайте экземпляр класса HTMLSaveOptions и задайте JavaScripts со значением ResourceHandling.Embed.
  3. Вызовите метод Save(savePath, options), чтобы сохранить веб-сайт в автономном режиме.

Чтобы загрузить веб-сайт с URL-адреса, вам необходимо выполнить несколько следующих шагов:

В следующем примере параметр ResourceHandling.Embed указывает, что любые ресурсы JavaScript должны быть встроены в документ HTML при сохранении. Это означает, что результирующий файл HTML будет содержать все ресурсы JavaScript внутри документа, а не ссылаться на них как на внешние файлы.

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

Сохранить веб-сайт, используя свойство MaxHandlingDepth

Свойство MaxHandlingDepth указывает максимальную глубину иерархии элементов HTML-документа для загрузки и обработки. API не будет загружать или обрабатывать какие-либо элементы за пределами этой глубины. Таким образом, «MaxHandlingDepth» оптимизирует производительность процесса сохранения, помогая уменьшить объем памяти и вычислительную мощность, необходимые для API, за счет ограничения количества обрабатываемых элементов.

Только открытый документ и его ресурсы по умолчанию сохраняются как отдельная веб-страница, но вы можете управлять глубиной обработки с помощью свойства MaxHandlingDepth. В следующем примере показано, как сохранить не только документ, но и все страницы, на которые он ссылается и URL-адрес которых вложен относительно URL-адреса этой страницы. Давайте посмотрим на пример C#, когда для этого свойства установлено значение 1, что означает, что будут загружены только элементы до глубины 1 в иерархии документа HTML:

 1using System.IO;
 2using Aspose.Html;
 3using Aspose.Html.Saving;
 4...
 5    // Load an HTML document from URL
 6    using var document = new HTMLDocument("https://docs.aspose.com/html/net/message-handlers/");
 7
 8    // Create an HTMLSaveOptions object and set MaxHandlingDepth property
 9    var options = new HTMLSaveOptions
10    {
11        ResourceHandlingOptions =
12        {
13            MaxHandlingDepth = 1
14        }
15    };
16
17    // Prepare a path for downloaded file saving 
18    string savePath = Path.Combine(OutputDir, "rootAndAdjacent/result.html");
19
20    // Save the HTML document to the specified file
21    document.Save(savePath, options);

Сохранить веб-сайт, используя свойство PageUrlRestriction

Aspose.HTML для .NET предоставляет различные параметры для фильтрации URL-адресов сохраненных страниц веб-сайта. Свойство PageUrlRestriction ограничивает загрузку веб-страниц с определенных URL-адресов или доменов при сохранении HTML-документа. Это свойство помогает повысить безопасность сохраненной страницы, предотвращая загрузку потенциально вредоносных веб-страниц.

По умолчанию свойство PageUrlRestriction установлено в RootAndSubFolders, что означает, что обрабатываются только страницы в корне и подпапках. Однако вы можете установить для этого свойства другое значение – «SameHost» или «None». Установка для него значения «None» позволит вам загружать веб-страницы с любого домена, чьи URL-адреса находятся на сохраненном веб-сайте. Очень важно использовать это свойство с осторожностью, поскольку разрешение загружать веб-страницы из любого домена может увеличить риск уязвимостей в системе безопасности.

В следующем примере все страницы, на которые ссылается HTML-документ, и страницы того же домена будут сохранены в дополнение к документу:

 1using System.IO;
 2using Aspose.Html;
 3using Aspose.Html.Saving;
 4...
 5    // Initialize HTML document from URL
 6    using var document = new HTMLDocument("https://docs.aspose.com/html/net/message-handlers/");
 7
 8    // Create an HTMLSaveOptions object and set MaxHandlingDepth and PageUrlRestriction properties
 9    var options = new HTMLSaveOptions
10    {
11        ResourceHandlingOptions =
12        {
13            MaxHandlingDepth = 1,
14            PageUrlRestriction = UrlRestriction.SameHost
15        }
16    };
17
18    // Prepare a path to save the downloaded file
19    string savePath = Path.Combine(OutputDir, "rootAndManyAdjacent/result.html");
20
21    // Save website offline
22    document.Save(savePath, options);

Вы можете скачать полные примеры C# и файлы данных с GitHub.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.