Как с помощью BeautifulSoup получить p-теги в которых нет дочерних a, i тегов?

Мне нужно найти и извлечь такие p теги, в которых нет дочерних a или i тегов. Как это сделать средствами самого BeautifulSoup ?

Вот пример :

<p class="text1">
  <i>Этот параграф нужно убрать из итового результата<i>
  <img src="ссылка на картинку" />
</p>
<p>
Этот параграф нужно включить в итовый результат
</p>
<p>
  <a href="тут ссылка на другую страничку">текст ссылки</a>
Этот параграф нужно убрать из итового результата
</p>

Сейчас это делаю не очень удачным способом:

def _ptags_with_text(p):
  p = p.prettify().strip()
  result = list(filter(lambda t: t in p, {'</a>', '<i>'}))
  return len(result) == 0

result = filter(_ptags_with_text, soup.find_all('p')[1:-2])

Ответы (1 шт):

Автор решения: Aleksey Voko

Кажется любой способ будет не очень красивый.

Можно, например, вот так, более читаемо:

def get_p_tags():
    p_tag_list = []
    p_tags = soup.find_all('p')
    for p_tag in p_tags:
        i_tag = p_tag.find('i')
        a_tag = p_tag.find('a')
        if not (i_tag or a_tag):
            p_tag_list.append(p_tag)

    return p_tag_list
→ Ссылка