Удалить блок в HTML на основе текста - PullRequest
0 голосов
/ 05 октября 2019

У меня есть фрагмент HTML ниже, и мне нужно удалить блок на основе его текста, например Name: John. Я знаю, что могу сделать это с decompose() из BeautifulSoup, используя имя класса sample, но я не могу применить декомпозицию, потому что у меня разные атрибуты блока, а также имя тега, но текст внутри имеет тот же шаблон. Есть ли в bs4 модули, которые могут решить эту проблему?

<div id="container">
    <div class="sample">
        Name:<br>
        <b>John</b>
    </div>
<div>

результат:

<div id="container"><div>

1 Ответ

1 голос
/ 05 октября 2019

Чтобы найти теги, основанные на внутреннем тексте, см. Как выбрать div по текстовому содержимому с помощью Beautiful Soup?

Получив необходимый div, вы можете просто позвонить decompose():

html = '''<div id="container">
    <div class="sample">
        Name:<br>
        <b>John</b>
    </div>
</div>'''
soup = BeautifulSoup(html, 'html.parser')
sample = soup.find(text=re.compile('Name'))
sample.parent.decompose()
print(soup.prettify())

Примечание: обратите внимание, что я исправил закрывающий тег для вашего "контейнера" ​​div!

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