Основы XPath

XPath является мощным инструментом для выбора узлов в XML и HTML документах. В этой статье я собрал основы работы с XPath и примеры его применения.

Что такое XPath?

XPath, или язык XML Path, представляет собой язык запросов для выбора узлов из документов XML или HTML. Он позволяет указывать шаблоны, соответствующие структуре документа, и возвращать все элементы, соответствующие этим шаблонам.

Основы синтаксиса XPath

Выбор узлов по имени тега

Простое выражение XPath позволяет выбирать элементы по имени тега. Например:

  • //h1 выбирает все заголовки первого уровня <h1> на странице
  • //p выбирает все абзацы <p>
  • //img выбирает все изображения <img>

Выбор узлов по атрибуту

Можно выбирать элементы по атрибуту или значению атрибута:

  • //*[@class="highlighted"] выбирает элементы с классом "highlighted"
  • //a[@href] выбирает все ссылки <a> с атрибутом href
  • //img[@alt="Logo"] выбирает изображения с альтернативным текстом "Логотип"

Выбор узлов по положению

Выбор узлов в зависимости от их положения:

  • //ul/li[1] выбирает первый элемент списка <li> в каждом списке <ul>
  • //table/tr[last()] выбирает последнюю строку <tr> в каждой таблице <table>
  • //ol/li[position() <= 3] выбирает первые три элемента <li> в каждом упорядоченном списке <ol>

Выбор узлов по отношению

Перемещение по дереву документа:

  • //div[@class="content"]/* выбирает все дочерние элементы <div> с классом "content"
  • //p/.. выбирает родительские элементы всех абзацев <p>
  • //h1/following-sibling::p выбирает все абзацы <p>, которые являются братьями и сестрами после заголовка <h1>
  • //section//img выбирает все изображения <img>, являющиеся потомками <section>

Предикаты и функции

Использование предикатов и функций для уточнения выбора:

  • //p[contains(text(),"scrapy")] выбирает абзацы <p>, содержащие текст "scrapy"
  • //a[starts-with(@href,"https")] выбирает ссылки <a>, у которых атрибут href начинается с "https"
  • //ul[count(li) > 10] выбирает списки <ul>, содержащие более 10 элементов <li>
  • //img[string-length(@alt) > 0] выбирает изображения <img> с непустым атрибутом alt

Использование XPath с lxml и BeautifulSoup

Анализ HTML с помощью BeautifulSoup

Для использования XPath с Python часто применяют библиотеки BeautifulSoup. Пример работы с HTML:

1from bs4 import BeautifulSoup
2
3html_content = "<html><body><h1>Пример</h1><p>Это абзац.</p></body></html>"
4soup = BeautifulSoup(html_content, "html.parser")
5
6headings = soup.find_all("h1")
7paragraphs = soup.find_all("p")

Извлечение текста и атрибутов

Извлечение данных с помощью BeautifulSoup:

1heading_text = headings[0].text
2paragraph_text = paragraphs[0].text

Простые советы

  • При создании селекторов XPath полезно использовать DevTools для тестирования.
  • Обрабатывайте противоречивую разметку перед использованием XPath.
  • Напишите надежные и удобные в обслуживании выражения XPath.
  • Кэшируйте результаты анализа HTML и XPath для повышения производительности.
comments powered by Disqus

Translations: