Навигация по HTML на Python
HTML-навигация
Пространство имен Aspose.Html.Dom предоставляет API, который представляет и взаимодействует с любыми документами HTML, XML или SVG и полностью основано на спецификации WHATWG DOM, поддерживаемой во многих современных браузерах.
В этой статье представлена информация о том, как программно извлекать данные из HTML-документов с помощью Aspose.HTML for Python via .NET. Вы узнаете:
- как перемещаться по HTML-документу и выполнять детальную проверку его элементов с помощью Python API;
- как перемещаться по документу с помощью CSS Selector и XPath Query.
Навигация по HTML предполагает доступ к элементам и их взаимоотношениям внутри документа и манипулирование ими. Aspose.HTML for Python via .NET позволяет вам перемещаться и проверять HTML, что предполагает работу с объектной моделью документа (DOM), предоставляемой библиотекой. В следующем списке показан самый простой способ доступа ко всем элементам DOM:
- Объектная модель документа (DOM). Структура DOM представляет HTML-документ в виде дерева узлов. Каждый узел представляет часть документа, например элементы, текст или комментарии.
- Класс Document представляет весь документ HTML, XML или SVG и служит корнем дерева документов.
- Класс Element представляет элемент в документе HTML или XML.
- Класс Node представляет один узел в дереве документа.
- Доступ к элементам
- Используйте такие методы, как
get_elements_by_tag_name(
tagname
), чтобы получать элементы по их имени тега. - Используйте метод get_element_by_id() для доступа к определенному элементу с уникальным идентификатором.
- Используйте
get_elements_by_class_name(
class_names
) для получения элементов по именам их классов. – Используйте метод query_selector(selector
) для одного элемента или query_selector_all(selector
) для списка элементов, соответствующих селектору CSS.
- Навигация по дереву DOM
- Доступ к дочерним элементам элемента с помощью свойств child_nodes или children.
- Используйте свойство first_child или last_child, чтобы вернуть первый или последний дочерний узел текущего узла, который может быть узлом любого типа, например элементом, текстом или комментарием.
- Используйте свойство parent_node для доступа к родительскому элементу данного элемента.
- Получите доступ к братьям и сестрам, используя такие свойства, как next_sibling или next_sibling.
- Управление элементами
- Используйте свойства класса Element, такие как inner_html и text_content, для изменения содержимого элемента.
- Получите или установите атрибуты, используя такие методы, как
get_attribute(
qualified_name
) и set_attribute(qualified_name, value
).
Справочник API предоставляет полный список классов и методов в пространстве имен aspose.html.dom.
Навигация по дереву DOM
Мы рассмотрим, как DOM представляет HTML-документ в памяти и как использовать API для навигации по HTML-файлам. Четыре свойства класса
Node – first_child
, last_child
, next_sibling
и next_sibling
, каждое из которых предоставляет живую ссылку на другой элемент с определенной связью с текущим элементом, если связанный элемент существует.
Используя упомянутые свойства, вы можете перемещаться по HTML-документу следующим образом:
1from aspose.html import *
2
3# Prepare HTML code
4html_code = "<span>Hello</span> <span>World!</span>"
5
6# Initialize a document from the prepared code
7with HTMLDocument(html_code, ".") as document:
8 # Get the reference to the first child (first SPAN) of the BODY
9 element = document.body.first_child
10 print(element.text_content) # output: Hello
11
12 # Get the reference to the whitespace between html elements
13 element = element.next_sibling
14 print(element.text_content) # output: " "
15
16 # Get the reference to the second SPAN element
17 element = element.next_sibling
18 print(element.text_content) # output: World!
Проверка HTML
Aspose.HTML содержит список методов, основанных на Спецификациях обхода элементов. Вы можете выполнить детальную проверку документа и его элементов с помощью API. Следующий код Python демонстрирует, как перемещаться и извлекать определенные элементы и их свойства из документа HTML с помощью Aspose.HTML for Python via .NET.
1import os
2from aspose.html import *
3
4# Load a document from a file
5data_dir = "data"
6document_path = os.path.join(data_dir, "html_file.html")
7with HTMLDocument(document_path) as document:
8 # Get the <html> element of the document
9 element = document.document_element
10 print(element.tag_name) # HTML
11
12 # Get the last element of the <html> element
13 element = element.last_element_child
14 print(element.tag_name) # BODY
15
16 # Get the first element of the <body> element
17 element = element.first_element_child
18 print(element.tag_name) # H1
19 print(element.text_content) # Header 1
Предоставленный код Python начинается с определения пути к файлу HTML, расположенному в каталоге data.
- Используйте HTMLDocument для загрузки документа и свойство document.document_element для доступа к корневому элементу HTML. Выведите имя тега этого элемента (HTML).
- Затем извлеките последний дочерний элемент HTML-элемента, используя last_element_child, который является элементом BODY, и напечатайте его имя тега.
- Впоследствии используйте свойство first_element_child для доступа к первому дочернему элементу элемента BODY, который является элементом H1, печатая как имя его тега, так и его текстовое содержимое, то есть Header 1.
XPath Query
Альтернативой HTML Navigation является XPath Query ( XML Path Language), который часто называют просто XPath. Это язык запросов, который можно использовать для запроса данных из документов HTML. Он основан на представлении HTML-документа в формате DOM и выбирает узлы по различным критериям. Синтаксис выражений XPath довольно прост и, что более важно, его легко читать и поддерживать.
В следующем примере показано, как использовать запросы XPath в Python API Aspose.HTML:
1from aspose.html import *
2from aspose.html.dom.xpath import *
3
4# Prepare HTML code
5code = """
6 <div class='happy'>
7 <div>
8 <span>Hello,</span>
9 </div>
10 </div>
11 <p class='happy'>
12 <span>World!</span>
13 </p>
14"""
15
16# Initialize a document based on the prepared code
17with HTMLDocument(code, ".") as document:
18 # Here we evaluate the XPath expression where we select all child SPAN elements from elements whose 'class' attribute equals to 'happy'
19 result = document.evaluate("//*[@class='happy']//span",
20 document,
21 None,
22 XPathResultType.ANY,
23 None)
24
25 # Iterate over the resulted nodes
26 node = result.iterate_next()
27 while node is not None:
28 print(node.text_content)
29 node = result.iterate_next()
30 # output: Hello,
31 # output: World!
Метод evaluate() в Python библиотеке Aspose.HTML позволяет выполнять запросы XPath к документам HTML или XML, обеспечивая детальное извлечение данных и навигацию. Он принимает выражение XPath в качестве основного параметра, определяющего выполняемый запрос, и возвращает объект XPathResult на основе определенного типа результата.
CSS-селектор
В дополнение к HTML-навигации и XPath Aspose.HTML Python API поддерживает CSS Selector API. Этот API позволяет формулировать шаблоны поиска с использованием синтаксиса CSS Selectors для идентификации и выбора элементов в HTML-документе.
Например, метод
query_selector_all(selector
) можно использовать для обхода HTML-документа и извлечения элементов, соответствующих указанному селектору CSS. Этот метод принимает строку селектора CSS в качестве аргумента и возвращает NodeList, содержащий все элементы, соответствующие критериям селектора. Используя селекторы CSS, вы можете эффективно находить элементы и управлять ими на основе их атрибутов, классов, идентификаторов и других критериев, что делает его универсальным инструментом как для простых, так и для сложных задач анализа документов.
1from aspose.html import *
2
3# Prepare HTML code
4code = """
5 <div class='happy'>
6 <div>
7 <span>Hello,</span>
8 </div>
9 </div>
10 <p class='happy'>
11 <span>World!</span>
12 <p>I use CSS Selector.</p>
13 </p>
14"""
15
16# Initialize a document based on the prepared code
17with HTMLDocument(code, ".") as document:
18 # Create a CSS Selector that extracts all elements whose "class" attribute equals "happy" and their child <span> elements
19 elements = document.query_selector_all(".happy span")
20
21# Iterate over the resulted list of elements
22 for element in elements:
23 print(element.text_content)
24 # output: Hello,
25 # output: World!
Заключение
Библиотека Aspose.HTML for Python via .NET предлагает надежный набор инструментов для работы с документами HTML, XML и SVG, соответствующий широко поддерживаемой спецификации WHATWG DOM современных браузеров. Используя класс HTMLDocument и его различные свойства и методы навигации, вы можете эффективно взаимодействовать с содержимым HTML и манипулировать им, избегая сложностей ручного извлечения данных и концентрируясь на более стратегических аспектах ваших проектов.
Aspose.HTML предлагает бесплатные онлайн- Веб-приложения HTML, которые представляют собой онлайн-коллекцию конвертеров, слияний, инструментов SEO, генераторов HTML-кода, инструментов URL, проверок доступности веб-страниц и многого другого. Приложения работают в любой операционной системе с веб-браузером и не требуют установки дополнительного программного обеспечения. Используйте нашу коллекцию веб-приложений HTML для решения повседневных задач и оптимизации рабочего процесса!