Python: использование xpath локально / для определенного элемента

Я пытаюсь получить ссылки со страницы с xpath. Проблема в том, что я хочу только ссылки внутри таблицы, но если я применил выражение xpath на всей странице, я захвачу ссылки, которые я не хочу.

Например:

tree = lxml.html.parse(some_response) links = tree.xpath("//a[contains(@href, 'http://www.example.com/filter/')]") 

Проблема заключается в том, что применяется выражение для всего документа. Я нашел элемент, который я хочу, например:

 tree = lxml.html.parse(some_response) root = tree.getroot() table = root[1][5] #for example links = table.xpath("//a[contains(@href, 'http://www.example.com/filter/')]") 

Но это похоже на выполнение запроса во всем документе, так как я все еще захватываю ссылки за пределами таблицы. На этой странице говорится, что «Когда xpath () используется в элементе, выражение XPath оценивается против элемента (если оно относительное) или против корневого дерева (если оно абсолютное):». Итак, что я использую, является абсолютным выражением, и мне нужно сделать его относительным? Это оно?

В принципе, как я могу фильтровать только те элементы, которые существуют внутри этой таблицы?

2 Solutions collect form web for “Python: использование xpath локально / для определенного элемента”

Ваш xpath начинается с косой черты ( / ) и поэтому является абсолютным. Добавьте точку ( . ) Спереди, чтобы сделать ее относительно текущего элемента, т.е.

 links = table.xpath(".//a[contains(@href, 'http://www.example.com/filter/')]") 

Другой вариант – запросить непосредственно элементы внутри вашей таблицы. Например:

 tree = lxml.html.parse(some_response) links = tree.xpath("//table[**criteria**]//a[contains(@href, 'http://www.example.com/filter/')]") 

Где **criteria** необходимы, если на странице много таблиц. Некоторыми возможными критериями могут быть фильтрация на основе идентификатора таблицы или класса. Например:

 links = tree.xpath("//table[@id='my_table_id']//a[contains(@href, 'http://www.example.com/filter/')]") 
  • Поиск xpaths на страницах с запущенным скриптом
  • Начинающий скрежет, продолжайте получать пустые списки
  • xpath не содержит A и B
  • Как сократить длинные выражения XPath со многими альтернативами OR?
  • Почему getparent () работает не так, как ожидалось?
  • python scraping reuters site ... bad xpath?
  • Скремблирование веб-контента с использованием xpath не будет работать
  • Как извлечь атрибут xml с помощью Python ElementTree
  • Python - лучший язык программирования в мире.