fbpx

Добавить отступы для рекурсивного парсера

338 просмотра
0
0 Комментариев

помогите пожалуйста добавить отступы, соответствующие уровню вложенности

привожу код, в котором при выводе на экран элементы верхнего(первого) уровня не имеют отступа. элементы второго уровня имеют отступ(1 символ табуляции). если появятся элементы третьего уровня, то они тоже будут иметь отступ величиной в 1 символ табуляции. а надо чтобы у них отступ был в 2 символа табуляции. как это реализовать я не представляю

import pprint
import requests
import lxml.etree
import lxml.html
 
def get_catalog(url):
    req = requests.get(url)
    html = req.text
    doc = lxml.html.document_fromstring(html)
    listCatalog = doc.xpath('//section[<a href="/users/4572/classltd">@class</a>="catalog"]/ul')
    return listCatalog
 
def parse_ul(listUl, indent=''):
    for elemUL in listUl:
        listLI = elemUL.xpath('li')
        if listLI:
            for elemLI in listLI:
                nameCat = elemLI.xpath('a/text()')[0].strip()
                print(indent, nameCat)
                newUL = elemLI.xpath('ul')
                if newUL:
                    parse_ul(newUL, indent='\t')
 
listCatalog = get_catalog('http://first-store.ru/')
parse_ul(listCatalog)


Добавить комментарий

1 Ответы

Python Опубликовано 25.06.2019
0

попробуйте так

def parse_ul(listUl, level=0):
    for elemUL in listUl:
        listLI = elemUL.xpath('li')
        if listLI:
            for elemLI in listLI:
                nameCat = elemLI.xpath('a/text()')[0].strip()
 
                print(u"%s%s" % (level * ' ', nameCat))
 
                newUL = elemLI.xpath('ul')
                if newUL:
                    parse_ul(newUL, level=level+1)

но в вашем примере нет елементов 3го уровня вложенности

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up