Не знаю, отсутствует ли ваш тег HTML . После того, как я его добавлю, результат выполнения с использованием simpifieddo c будет следующим:
from simplified_scrapy.simplified_doc import SimplifiedDoc
html='''
<ul>
<li><object type="text/sitemap"><param name="Name" value="level1"/></object>
<ul>
<li><object type="text/sitemap"><param name="Name" value="data1"/></object></li>
<li><object type="text/sitemap"><param name="Name" value="level2"/></object>
<ul>
<li><object type="text/sitemap"><param name="Name" value="data2"/></object></li>
<li><object type="text/sitemap"><param name="Name" value="data3"/></object></li>
</ul>
</ul>
</ul>'''
def test(ul,l_name,lst):
l1s = ul.children
l1_len=len(l1s)
for i in range(0,l1_len-1): # level1
l1 = l1s[i]
l1n = l1s[i+1]
if l1.tag=='li':
if l1n.tag=='ul':
l_name = l_name+'-'+l1.param.value if l_name else l1.param.value
test(l1n,l_name,lst)
else:
lst.append(l_name+'-'+l1.param.value)
if i==l1_len-2:
if l1n.tag=='li':
lst.append(l_name+'-'+l1n.param.value)
doc = SimplifiedDoc()
doc.loadHtml(doc.replaceReg(html,'</object>[\s]*<ul','</object></li><ul'))
ul = doc.ul
lst = []
test(ul,'',lst)
print (lst)
Результат:
['level1-data1', 'level1-level2-data2', 'level1-level2-data3']
Примеры SimplifiedDo c можно найти здесь