BeautifulSoup: получить имя тега самого элемента, а не его потомков - PullRequest
14 голосов
/ 16 декабря 2011

У меня есть приведенный ниже (упрощенный) код, который использует следующий источник:

<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, пересчитать до правильного дочернего тега.Это кажется смешным.

1 Ответ

26 голосов
/ 16 декабря 2011

ele уже тег, попробуйте сделать это:

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

так что в вашем примере это будет просто

print(ele.name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...