Здесь есть 2 разных вопроса, оба решаются другими вопросами.
Первый:
import xml.etree.ElementTree as ET
html = '<div> <div id="abc 123"></div> <div id="def hhh"></div> <div id="ghi test"></div> </div>'
root = ET.fromstring(html)
try:
print( root.findall("//div[starts-with(@id, 'def')]") )
except SyntaxError as e:
print e
См. В прямом эфире: https://ideone.com/PfpjYz Ошибка «невозможно использовать абсолютный путь для элемента» - это обрабатывается Python - ElementTree - нельзя использовать абсолютный путь для элемента
Вторая проблема, при использовании относительных элементов вы получаете другую ошибку:
import xml.etree.ElementTree as ET
html = '<div> <div id="abc 123"></div> <div id="def hhh"></div> <div id="ghi test"></div> </div>'
root = ET.fromstring(html)
try:
print( root.findall(".//div[starts-with(@id, 'def')]") )
except SyntaxError as e:
print e
См. В прямом эфире: https://ideone.com/BNc7My
Ошибка изменила «недопустимый предикат» - см. xpath-support - нет начала запуска
См .: Python XPath SyntaxError : неверный предикат для возможных решений.
Наконец, вы можете использовать другую библиотеку xml или обойти ограничения этой.
import lxml.etree
root = lxml.etree.fromstring(html)
print root.xpath(".//div[starts-with(@id, 'def')]")[0].attrib
См. Онлайн: https://ideone.com/Ie1j8F
Примечание : этот вопрос все еще повторяется и должен быть закрыт как таковой, но это долго, чтобы вписаться в комментарий.