Как рекурсивно обойти html-дерево на python?

315
15 декабря 2016, 16:23

Есть меню сайта в html - сделано через вложенные списки:

<ul> 
    <li><a href="cat">Cat</a></li> 
    <li><a href="cat2">Cat2</a> 
        <ul> 
            <li><a href="subcat">Subcat</a></li> 
            <li><a href="subcat2">Subcat2</a></li> 
        </ul> 
    </li> 
    <li><a href="cat3">Cat3</a></li> 
</ul>

Уровень вложенности везде разный (максимальный - 3, но желательно этого не предполагать)

Это меню нужно превратить в таблицу:

"Cat" url
"Cat2" url
"Cat2" "Subcat" url

и т.д.

То есть нужно взять и обойти рекурсивно дерево.

Какими библиотеками пользоваться (использую python3)? Как обойти дерево рекурсивно, не зная глубины?

Answer 1

Как вариант можно использовать библиотеку BeautifulSoup. Там у объекта супа есть свойство .descendants, пример смотри тут. И уже в самом цикле ты делаешь соответствующие проверки, которые тебе нужны, а так же создаешь нужную структуру на выход.

READ ALSO
Закрытие div при клике вне его

Закрытие div при клике вне его

Нужно закрыть div, если клик был вне его области

454
Как реализовать поиск слова в html файле? [закрыто]

Как реализовать поиск слова в html файле? [закрыто]

Подскажите, как реализовать поиск заданного слова на html странице?

266
Clearfix in CSS

Clearfix in CSS

Для очистки обтекания всегда пользовался следующей записью:

254
Поиск тегов без атрибутов в HTML с помощью регулярных выражений

Поиск тегов без атрибутов в HTML с помощью регулярных выражений

Стоит задача поиска всех не повторяющихся тегов без атрибутов (например, head, body) в HTML файле с помощью регулярных выражений

247