Основы 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 для повышения производительности.