Разбор Python xml с BeautifulSoup - PullRequest
0 голосов
/ 30 мая 2018

У меня есть файл ниже XML, я хотел бы извлечь все href, я знаю, как это сделать, но я хочу пометить конец каждого основного тега 'parent' с помощью ----

Мне нужен вывод как это:

xxxx yyyy ----- zzzz tttt ------ wwww qqqqq ssss uuuu oooo pppp ----- mmmm nnnnn ----

xml:

<root> <parent id1='1111'> <child herf='xxx'/> <child herf ='yyyy'/> </parent> <parent id1='22222'> <child herf='zzzz'/> <child herf ='tttt'/> </parent> <parent id1='33333'> <child herf='wwww'/> <child herf ='qqqqq'/> <parent id1='4444'> <child herf='ssss'/> <child herf ='uuuu'/> </parent> <parent id1='55555'> <child herf='oooo'/> <child herf ='pppp'/> </parent> <parent id1='6666'> <child herf='mmmm'/> <child herf ='nnnnn'/> </parent>

Это мой код:

xml= soupTop.findChildren(recursive=False) for tag in xml: s =tag.findAll("child", {"href" : re.compile(r".*")}) print (s)

1 Ответ

0 голосов
/ 30 мая 2018

Одна проблема в том, что ваш xml недействителен.Тег <root> никогда не закрывается, равно как и <child id1='33333'>.BS хорошо принимает неправильный ввод, но обрабатывать его нужно очень осторожно.

Это означает, что я не могу представить способ получить результат, который вы запрашиваете в вопросе.Что я могу сделать:

  1. Предположим, что каждый новый открывающий родительский тег открывает новую последовательность дочерних элементов.Это означает, что нужно найти все теги parent и в каждом отдельном процессе выводятся только прямые дочерние элементы

    for p in soupTop.findAll('parent'):
        for c in p.children:
            if c.name == 'child':
                print(c['herf'], end =' ')
        print('-----', end = ' ')
    

    :

    xxx yyyy ----- zzzz tttt ----- wwww qqqqq ----- ssss uuuu ----- oooo pppp ----- mmmm nnnnn ----- 
    
  2. обрабатывать только родительские теги самого высокого уровня,и в каждом из них рекурсивно найти все child теги

    p = soup.find('parent')
    while p is not None:
        for c in p.findAll('child'):
            print(c['herf'], end=' ')
        print('-----', end = ' ')
        p = p.findNextSibling('parent')
    

    вывод:

    xxx yyyy ----- zzzz tttt ----- wwww qqqqq ssss uuuu oooo pppp mmmm nnnnn ----- 
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...