Website to HTML – сохранить сайт в HTML на C#

Чтобы сохранить сайт или веб-страницу в HTML на C#, загрузите URL через HTMLDocument, создайте HTMLSaveOptions, если нужна настройка ресурсов, и вызовите document.Save(savePath, options). Используйте ResourceHandlingOptions, чтобы управлять JavaScript, связанными страницами, ограничениями URL и сохраняемыми ресурсами.

Даже когда интернет обычно доступен, офлайн-копия веб-страницы может понадобиться для чтения, исследования, архивирования, миграции или обработки документов. Сохранение сайта в HTML позволяет держать содержимое страницы и связанные ресурсы доступными вне исходного сайта.

Есть несколько причин, по которым может понадобиться преобразовать сайт в HTML:

В этой статье показано, как сохранить сайт или веб-страницу с помощью Aspose.HTML for .NET API. Процесс можно настроить – сохранить весь сайт или только одну веб-страницу.

Сохранить веб-страницу в HTML на C#

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

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

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

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

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

HTMLSaveOptions и обработка ресурсов

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

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

СвойствоОписание
DefaultПолучает или задает enum-значение, которое определяет способ обработки ресурсов по умолчанию. Сейчас поддерживаются значения Save, Ignore и Embed. Значение по умолчанию – Save, то есть ресурс будет сохранен как файл.
JavaScriptОпределяет способ обработки скриптов. Сейчас поддерживаются значения Save, Ignore, Discard и Embed. Значение по умолчанию – Save, то есть ресурс будет сохранен как файл.
MaxHandlingDepthОпределяет максимальную глубину страниц, которые будут обработаны. Используйте это свойство, чтобы управлять тем, сохраняет ли Aspose.HTML только текущую веб-страницу, страницы по прямым ссылкам или более глубокую структуру сайта. Глубина 1 означает, что будут обработаны только страницы, на которые прямо ссылается сохраняемый документ. Значение -1 приводит к обработке всех страниц. Значение по умолчанию – 0.
PageUrlRestrictionСодержит сведения об ограничениях, применяемых к URL обрабатываемых страниц. Значение по умолчанию – RootAndSubFolders, то есть обрабатываются только ресурсы в корне и подпапках.
ResourceUrlRestrictionСодержит сведения об ограничениях, применяемых к URL обрабатываемых ресурсов, таких как CSS, JavaScript, изображения и другие файлы. Значение по умолчанию – SameHost, то есть обрабатываются только ресурсы с того же хоста.

Встроить JavaScript при сохранении HTML

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

Чтобы сохранить сайт с URL и встроить ресурсы JavaScript:

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

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

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

Управлять глубиной сохранения сайта

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

По умолчанию сохраняются только открытый документ и его ресурсы как отдельная веб-страница, но глубиной обработки можно управлять через MaxHandlingDepth. Следующий пример показывает, как сохранить не только документ, но и страницы, на которые он ссылается и URL которых вложен относительно URL этой страницы. Рассмотрим пример C#, где это свойство установлено в 1, что означает сохранение только элементов до глубины 1 в иерархии 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);

Ограничить URL сохраняемых страниц

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

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

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

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

Как выбрать параметры сохранения сайта

ЦельКакую опцию проверить
Сохранить только текущую страницу и ресурсы того же доменаПоведение HTMLSaveOptions по умолчанию
Встроить JavaScript в сохраненный HTMLResourceHandlingOptions.JavaScript = ResourceHandling.Embed
Ограничить глубину обработки связанных страницResourceHandlingOptions.MaxHandlingDepth
Ограничить, какие связанные страницы можно загружатьResourceHandlingOptions.PageUrlRestriction
Ограничить, какие ресурсы можно сохранятьResourceHandlingOptions.ResourceUrlRestriction

Типичные проблемы при сохранении сайта

ПроблемаПричинаРешение
Не хватает части CSS, изображений или скриптовОграничения URL ресурсов или поведение same-host по умолчанию не позволяют их скачать.Проверьте ResourceUrlRestriction и убедитесь, что нужные ресурсы разрешены параметрами сохранения.
Связанные страницы не сохраняютсяMaxHandlingDepth по умолчанию равен 0, поэтому сохраняются только открытый документ и его ресурсы.Увеличьте MaxHandlingDepth, если нужно обработать связанные страницы.
Загружается слишком много страницMaxHandlingDepth или PageUrlRestriction заданы слишком широко.Используйте меньшую глубину и ограничивайте URL страниц через RootAndSubFolders или SameHost.
JavaScript-файлы остаются внешнимиОбработка JavaScript настроена на сохранение отдельных файлов или используется поведение по умолчанию.Установите ResourceHandlingOptions.JavaScript в ResourceHandling.Embed, если рабочему процессу нужны встроенные скрипты.
Не удается сохранить удаленную страницуСреда блокирует сетевой доступ, сертификаты или удаленные ресурсы.Проверьте сетевые разрешения, настройки прокси и CA-сертификаты в среде выполнения.

FAQ

Может ли Aspose.HTML for .NET сохранить весь сайт?

Aspose.HTML for .NET может сохранить веб-страницу и обработать связанные страницы и ресурсы согласно HTMLSaveOptions и ResourceHandlingOptions. Используйте MaxHandlingDepth и ограничения URL осторожно, чтобы контролировать объем обрабатываемого сайта.

Что сохраняется по умолчанию?

С параметрами сохранения по умолчанию сохраняются открытый документ и связанные ресурсы. Ограничения обработки ресурсов определяют, какие именно ресурсы будут обработаны.

Как встроить JavaScript в сохраненный HTML?

Установите ResourceHandlingOptions.JavaScript в ResourceHandling.Embed внутри HTMLSaveOptions, затем вызовите Save(savePath, options).

Как избежать загрузки слишком большого числа связанных страниц?

Держите MaxHandlingDepth низким и используйте PageUrlRestriction, чтобы ограничить обрабатываемые страницы корнем, подпапками или тем же хостом.

Другие платформы

Связанные статьи по извлечению данных

Полные примеры C# и файлы данных доступны в репозитории Aspose.HTML for .NET на GitHub.