Как с помощью 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