У меня есть два типа xpaths, первый выглядит так:
//div[@class = "location msM10"]//div[@class='categories']
а второй выглядит так:
//a[contains(@class,'job-title')][1]/@title
Я использую библиотеку lxml для получения их значений со страниц HTML:
from lxml import etree
html_text = etree.HTML(HTML_WEB_PAGE)
extracted_value = html_text.xpath(MY_XPATH)
Моя проблема в том, что первый XPath возвращает список Elements (в extracted_value), а второй возвращает список str. Итак, если я хочу получить точный HTML-тег, из которого были извлечены значения, я могу сделать это с помощью первого XPath (где у меня есть список элементов), выполнив:
element_in_html = etree.tostring(extracted_value[0])
но я не могу сделать это со вторым типом xpaths. Как я могу добиться этого со вторым типом xpaths?
Я нашел решение для конкретной проблемы в Интернете, где, как только у нас есть значение str, мы помещаем его в другой xpath для получения элементов, но оно не очень хорошо подходит для моего проекта (мои XPath более разнообразны).






Предполагая, что вы знаете, что ваш XPath выбирает только узлы атрибутов, которые вы можете сделать, например.
for att in extracted_value:
parent_element = att.getparent()
print(etree.tostring(parent_element))
чтобы выбрать и распечатать сериализацию родительского элемента каждого выбранного атрибута.
См. https://lxml.de/xpathxslt.html#xpath-return-values .
Какой фрагмент HTML вы хотите вернуть для узла атрибута, такого как
@title?