2011-12-16 10 views
8

tengo el código de abajo (simplificado), que utiliza la siguiente fuente:BeautifulSoup: obtener el nombre de la etiqueta del elemento en sí, no a sus hijos

<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 

Quiero conseguir la etiqueta de ele, en este caso " div ". Sin embargo, parece que solo puedo obtener la etiqueta de sus hijos. ¿Me estoy perdiendo algo simple? Pensé que podría hacer ele.tag.name, pero esa es una excepción ya que la etiqueta es 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 

En este punto, estoy considerando hacer algo en el camino de conseguir el padre de ele, a continuación, obtener las etiquetas de los hijos de los padres y, después de haber contado el número de hermanos superiores ELE, la cuenta regresiva para el niño correcta etiqueta. Eso parece ridículo.

Respuesta

18

ele ya es una etiqueta, intente hacer esto:

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

por lo que en el ejemplo, sería simplemente

print(ele.name) 
+0

pero que requiere ya sabiendo que es una etiqueta div. – user984003

+0

@ user984003 ver la edición, propuse un ejemplo, pero debería funcionar de la manera que usted solicitó. la parte importante es que no debes hacer .tag.name, solo .name directamente –

+0

PERO, ya veo, ya tengo una etiqueta, así que lo hago: print ele.name. Lo probé y funcionó :) ¡Me estaba perdiendo algo simple! Si edita su respuesta para decir ele.name, entonces lo verificaré como la respuesta correcta cuando pueda. – user984003

Cuestiones relacionadas