Я пробовал это, но это не работает.
t = item.findtext('.//span[@class="python"]//a[2]')
Это часто задаваемые вопросы о //
сокращении .
.//a[2]
означает: Выбрать все a
потомков текущего узла, которые являются вторым a
дочерним элементом их родителя.Таким образом, можно выбрать более одного элемента или ни одного элемента - в зависимости от конкретного документа XML.
Проще говоря, оператор []
имеет более высокий приоритет, чем //
.
Если вы хотите вернуть только один (второй) из всех узлов, вы должны использовать скобки, чтобы установить желаемый приоритет:
(.//a)[2]
Это действительно выбирает второго a
потомкатекущий узел.
Для фактического выражения, используемого в вопросе, измените его на :
(.//span[@class="python"]//a)[2]
или измените его на:
(.//span[@class="python"]//a)[2]/text()