Пытаясь помочь другому пользователю с каким-либо вопросом, я сам столкнулся со следующей проблемой:
Цель - найти страну происхождения списка вин на странице. Итак, начнем с:
import requests
from lxml import etree
url = "https://www.winepeople.com.au/wines/Dry-Red/_/N-1z13zte"
res = requests.get(url)
content = res.content
res = requests.get(url)
tree = etree.fromstring(content, parser=etree.HTMLParser())
tree_struct = etree.ElementTree(tree)
Далее, по причинам, о которых я расскажу в отдельном вопросе, я пытаюсь сравнить xpath двух элементов с определенными атрибутами. Итак:
wine = tree.xpath("//div[contains(@class, 'row wine-attributes')]")
country = tree.xpath("//div/text()[contains(., 'Australia')]")
Пока все хорошо. С чем мы имеем дело?
type(wine),type(country)
>> (list, list)
Они оба списки. Давайте проверим тип первого элемента в каждом списке:
type(wine[0]),type(country[0])
>> (lxml.etree._Element, lxml.etree._ElementUnicodeResult)
И вот тут начинается проблема. Потому что, как уже упоминалось, мне нужно найти xpath первых элементов списков wine
и country
. И когда я бегу:
tree_struct.getpath(wine[0])
Вывод, как и ожидалось:
'/html/body/div[13]/div/div/div[2]/div[6]/div[1]/div/div/div[2]/div[2]'
Но с другим:
tree_struct.getpath(country[0])
Вывод:
TypeError: Argument 'element' has incorrect type (expected
lxml.etree._Element, got lxml.etree._ElementUnicodeResult)
Я не смог найти много информации о _ElementUnicodeResult)
, так что это? И, что более важно, как я могу исправить код, чтобы получить xpath для этого узла?