XPath výraz
//li[not(@class="wnd-with-submenu")]/a vám vytáhne všechny elementy
a, které jsou přímo uvnitř
li, které nemá třídu
wnd-with-submenu. Tj. tohle nahrazuje rekurzi, to vám vrátí odkazy rovnou ze všech úrovní. Z
a získáte název a odkaz. Pak od každého nalezeného
a použijete
.//ancestor::ul[1], čímž se vrátíte k nejbližšímu nadřazenému
ul a z něj získáte
class, kde bude třeba to
level-3 (což je předpokládám ta hloubka, kterou chcete).
Takže v tom Pythonu to bude vypadat zhruba takhle nějak:
links = menu_nav.xpath('.//li[not(@class="wnd-with-submenu")]/a')
for link links:
ul = link.xpath(".//ancestor::ul[1]")
print(link.text)
print(link.get("href"))
print(ul.get("class"))
li_obj = ul_obj[0].xpath('//li[parent::ul[@class="level-2"] and not(parent::ul[@class="level-3"])]/a')
Citovaný XPath výraz najde všechna
a v elementech
li, které mají jako rodiče
ul s třídou
level-2 a zároveň nemají jako rodiče
ul s třídou
level-3. Což je nesmysl, ta druhá podmínka je tam zbytečná – žádný
li přímo uvnitř
ul s třídou
level-2 nemůže mít jako rodiče zároveň
ul s třídou
level-3. Tenhle výraz by vám tedy vybral jen všechna
a v úrovni
level-2, bez ohledu na to, zda tam je nebo není zanořená třetí úroveň.