web-dev-qa-db-ja.com

BeautifulSoup:子ではなく、要素自体のタグ名を取得します

以下の(簡略化された)コードがあり、次のソースを使用しています。

<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

Eleのタグ(この場合は「div」)を取得したいと思います。しかし、私はその子供たちのタグを取得することしかできないようです。簡単なものが足りませんか? ele.tag.nameができると思いましたが、タグが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

この時点で、eleの親を取得し、次に親の子のタグを取得し、eleの上位の兄弟の数を数えて、正しい子タグまでカウントダウンする方法を検討しています。それはばかげているようです。

16
user984003

eleはすでにタグです。これを試してください:

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

だからあなたの例ではそれはただ

print(ele.name)
29
Sebastian Piu