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