it-swarm-pt.tech

BeautifulSoup: obtém o nome da tag do próprio elemento, não de seus filhos

Tenho o código abaixo (simplificado), que usa a seguinte fonte:

<html>
    <p>line 1</p>
    <div>
        <a>line 2</a>
    </div>
</html>

soup = BeautifulSoup('<html><p>line 1</p><div><a>line 2</a></div></html>')
ele = soup.find('p').nextSibling
somehow_print_tag_of_ele_here

Eu quero pegar a tag de ele, neste caso "div". No entanto, só consigo obter a etiqueta de seus filhos. Estou perdendo algo simples? Eu pensei que poderia fazer ele.tag.name, mas isso é uma exceção, pois tag é None.

#Below correctly prints the div element "<div><a>line 2</a></div>"
print ele

#Below prints "None". Printing tag.name is an exception since tag is None
print ele.tag 

#Below prints "a", the child of ele
allTags = ele.findAll(True)
for e in allTags:
    print e.name

Neste ponto, estou pensando em fazer algo ao longo do caminho para obter o pai de ele, depois obter as marcas dos filhos dos pais e, depois de contar quantos irmãos superiores ele tem, fazer a contagem regressiva para a marca de filho correta. Isso parece ridículo.

16
user984003

ele já é uma tag, tente fazer isso:

soup = BeautifulSoup('<html><p>line 1</p><div><a>line 2</a></div></html>')
print(soup.find('p').nextSibling.name)

então no seu exemplo seria apenas

print(ele.name)
29
Sebastian Piu