BeautifulSoup4, как проверить, есть ли у тега указанный c дочерний тег - PullRequest
0 голосов
/ 02 марта 2020

У меня есть следующий код:

b = soup.find('body')

for t in b.find_all(recursive=False):
    if not t.find(['h1', 'h2', 'h3', 'h4', 'h5', 'h6']):
        print(t.get_text())

, который должен печатать все дочерние теги t, которые не 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' (то есть заголовки).

Вместо этого он ничего не печатает. Как исправить это выражение if, чтобы код печатался только тогда, когда основной тег не имеет указанных дочерних тегов?

1 Ответ

1 голос
/ 02 марта 2020

(Python 3.8.1)
Согласен с @Manali. Добавьте тег, который вы хотите найти, так же, как вы это сделали в soup.find ('body') .

soup.html.find_all("<tag name>", recursive=False)

(Изменить):

Невозможно используйте TAG напрямую, вместо этого используйте TAG.NAME.
Используйте: if t.name not in ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']

вместо: if not t.find(['h1', 'h2', 'h3', 'h4', 'h5', 'h6']):

В противном случае попробуйте следующий фрагмент:

b = soup.find('body')
children = b.findChildren(recursive=False)
for child in children:
    if child.name not in ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']:
        print(child.name)

Это должно дать вам желаемые результаты.

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