Как найти тег P, в котором нет братьев и сестер, с помощью Beautiful soup - PullRequest
0 голосов
/ 28 января 2019

В некоторых тегах <p></p> есть тег <img> и тег <h4>, но я хочу только те теги <p>, в которых нет тегов родных элементов, а просто содержимое.

 <p> <img src="any url"/> </p>     <p> hello world </p>

Я хочу <p> тег, который не имеет <img> тега с использованием красивого супа

Ответы [ 4 ]

0 голосов
/ 29 января 2019

Предполагая, что BeautifulSoup 4.7+, вы сможете сделать это:

import bs4
html="""<p> <img src="any url"/> </p>     <p> hello world </p>"""
soup=bs4.BeautifulSoup(html,"html.parser")

kids=soup.select("p:not(:has(*))")
print(kids)
0 голосов
/ 28 января 2019

Получит весь текст в элементах <p>, но не получит его ни от одного из дочерних элементов в <p>.Рекурсив должен быть равен false, иначе он будет смотреть на дочерние элементы.Я добавил в другом тестовом примере, чтобы вы показали это: <p><h4>Heading</h4></p>

from bs4 import BeautifulSoup

html = "<p> <img src='any url'/> </p>   <p><h4>Heading</h4></p>  <p> hello world </p>"

soup = BeautifulSoup(html)

for element in soup.findAll('p'):
    print("".join(element.findAll(text=True, recursive=False)))
0 голосов
/ 29 января 2019

Решение для получения всех тегов p без дочерних тегов.

import bs4
html="""<p> <img src="any url"/> </p>     <p> hello world </p>"""
soup=bs4.BeautifulSoup(html,"html.parser")

def has_no_tag_children(tag):
    if  type(tag) is bs4.element.Tag: #check if tag
        if tag.name =='p': #check if it is p tag
            if  bs4.element.Tag not in [type(child) for child in tag.children]: # check if has any tag children
                return True
    return False

kids=soup.find_all(has_no_tag_children)
print(kids)

Вывод

[<p> hello world </p>]
0 голосов
/ 28 января 2019
from bs4 import BeautifulSoup

txt = """
<p> <img src="any url"/> </p>     <p> hello world </p>
"""

soup = BeautifulSoup(txt)

for node in soup.findAll('p'):
    print(' '.join(node.findAll(text=True, recursive = False)))

ВЫХОД:

Привет, мир

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